PHP foreach循环中赋值与array_push的差异及操作疑问
PHP中foreach循环里直接数组赋值与array_push()的区别
咱们先把你的问题拆解清楚,核心就是两种数组操作的本质差异,以及你两段代码看似相似实则不同的原因:
1. 直接赋值 $data['database'] = $row 和 array_push() 的核心区别
$data['database'] = $row:每次循环都会把$row的值完全覆盖$data['database']原来的内容。也就是说,第一次循环时$data['database']变成第一个$row,第二次循环又被替换成第二个$row,以此类推。所以循环结束后,$data['database']只会保留最后一次循环的$row值(你提到循环外看到第一行可能是笔误,实际应该是最后一行)。而你在循环内var_dump能看到当前行,是因为那时候刚完成赋值,还没被下一次循环覆盖。array_push($data['database'], $row):这个函数是把$row作为一个新元素追加到$data['database']数组的末尾,不会覆盖原有内容。每循环一次,数组就多一个元素,所以循环结束后数组里会包含所有查询到的行数据。
2. 为什么你的第二段赋值代码能得到全部结果?
看这段代码:
$sql = ee()->db->select('*')->from('exp_credit_tracker_credit_type')->get(); $credit_type = array(); foreach ($sql->result() as $row) { $credit_type[$row->credit_name]=$row->credit_name; }
这里你不是直接覆盖整个$credit_type数组,而是给数组的特定键($row->credit_name)赋值。每次循环都会给数组新增一个键值对(只要credit_name不重复,重复的话会覆盖对应键的值),所以循环结束后数组里自然会保留所有的键值对,和直接覆盖整个数组完全是两回事。
3. 想用赋值语法实现array_push的效果?这么写就行
如果你不想用array_push,想用赋值语法来追加元素,PHP提供了更简洁的写法:
$data['database'][] = $row;
这行代码的作用和array_push($data['database'], $row)完全等价(当只追加一个元素时),它会自动把$row作为新元素添加到数组末尾,不会覆盖原有内容,循环结束后就能得到所有行的数据了。
内容的提问来源于stack exchange,提问作者user6818018
相关产品推荐
相关产品推荐

