PHP关联数组合并问题:使用array_push时数据被覆盖
解决array_push覆盖值的问题
我来帮你捋捋代码里的问题哈~你遇到的覆盖问题,根源在这两个地方:
- 你在循环内部每次都重新初始化了空数组
$a = array();,这就导致每次循环都是从头开始往空数组里加元素,之前循环的结果自然留不住; array_push()的返回值是数组新的长度(数字),不是你想要的数组本身,所以$result[$i] = array_push($a, $data);这行存到$result里的其实是数字,不是你构建的$data数组。
修正后的代码方案
你可以直接往$result数组里追加元素,或者把$a的初始化移到循环外面,这里给你两种简洁的写法:
方案一:直接构建目标数组(更简洁)
<?php $tem = ["blue","ss"]; $len = count($tem); $result = []; // 先初始化目标数组 for($i=0;$i<$len;$i++){ $data = [ 'code' => $tem[$i], 'discount_type' => 'percent', ]; $result[] = $data; // 直接往$result里追加元素,不用array_push也可以 } print_r($result); ?>
方案二:保留$a变量的写法(如果需要中间数组)
<?php $tem = ["blue","ss"]; $len = count($tem); $a = []; // 把$a的初始化移到循环外面 $result = []; for($i=0;$i<$len;$i++){ $data = [ 'code' => $tem[$i], 'discount_type' => 'percent', ]; array_push($a, $data); // 往同一个$a里追加元素 $result[$i] = $a; // 这里存的是完整的$a数组,如果需要的话 } print_r($a); // 最终的合并数组 print_r($result); // 每个循环阶段的$a数组 ?>
运行结果说明
方案一运行后,$result会是你想要的合并数组:
Array ( [0] => Array ( [code] => blue [discount_type] => percent ) [1] => Array ( [code] => ss [discount_type] => percent ) )
这样就不会出现覆盖的问题啦~
内容的提问来源于stack exchange,提问作者rehan rabbani
相关产品推荐
相关产品推荐

