PHP使用array_push向已有数组元素新增auction键的问题排查
问题错误分析
- 错误1:
$resArr[0]["auction"]在首次调用时不存在,直接使用array_push()会自动将该键初始化为空数组,再将你传入的拍卖详情数组作为子元素插入,最终得到的auction字段会是嵌套的二维数组,和预期结构不符。 - 错误2:你仅对下标为0的数组元素做了处理,其余两个产品元素没有新增
auction字段,无法得到全量符合要求的结果。
修复方案
方案1:直接赋值(推荐,适配你给出的目标结构)
直接遍历数组为每个元素新增auction键并赋值即可,无需使用array_push,代码更简洁:
<?php $resArr = array(); array_push($resArr, array("product" => "test1", "category" => "cat1")); array_push($resArr, array("product" => "test2", "category" => "cat2")); array_push($resArr, array("product" => "test3", "category" => "cat3")); // 遍历所有产品元素添加auction字段 foreach ($resArr as &$item) { $item["auction"] = array("name" => "auct1", "price" => "1"); } // 解除引用避免后续操作污染数组 unset($item); print_r($resArr);
方案2:使用array_push(适用于单个产品对应多个拍卖记录的场景)
如果后续auction字段需要存储多组拍卖记录,可以用array_push,但需要先为每个元素初始化auction为空数组:
<?php $resArr = array(); array_push($resArr, array("product" => "test1", "category" => "cat1")); array_push($resArr, array("product" => "test2", "category" => "cat2")); array_push($resArr, array("product" => "test3", "category" => "cat3")); foreach ($resArr as &$item) { // 先初始化auction为空数组 $item["auction"] = []; // 再push拍卖详情,可多次push添加多条记录 array_push($item["auction"], array("name" => "auct1", "price" => "1")); } unset($item); print_r($resArr);
注:该方案得到的auction是二维数组,如果你要的是单条拍卖记录的结构,用方案1即可。
内容的提问来源于stack exchange,提问作者Carol.Kar
相关产品推荐
相关产品推荐

