我继承了一个代码库,在其中我发现了一些精炼和“煮沸”的版本,如下所示$json = '[ {"id": 1, "val":"apple"}, {"id": 2, "val":"mango"} ]';$data = json_decode($json);$arr = [];foreach($data as $d){ $m->id = $d->id; $m->val = $d->val; $arr[] = $m;}print_r($arr);结果Array( [0] => stdClass Object ( [id] => 2 [val] => mango ) [1] => stdClass Object ( [id] => 2 [val] => mango ))我的问题是为什么当前的迭代会对它的前任产生任何影响?PHP 版本:7.2编辑:如果问题看起来与 json 有关,但事实并非如此,我深表歉意,相反,在我的代码库中,我有这些对象来自另一个称为函数的对象。我使用 json_decode 只是为了说明问题
1 回答
当年话下
TA贡献1890条经验 获得超9个赞
$m没有明确定义。所以当 php 第一次遇到时$m,php 会创建这个变量。当你有->符号时,php 就会理解这是对象。所有其他迭代都只是使用同一个实例$m。
此外,启用错误报告后,您会看到警告:
警告:从空值创建默认对象
而在 php8 中你会得到一个致命错误。
解决方案:
foreach($data as $d){
// explicitly define $m
$m = new stdClass;
$m->id = $d->id;
$m->val = $d->val;
$arr[] = $m;
}
- 1 回答
- 0 关注
- 71 浏览
添加回答
举报
0/150
提交
取消