You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:19:11