【发布时间】:2017-08-13 06:27:54
【问题描述】:
对于从数组 foreach 循环创建的对象,两次遍历第一项
$list = (object)['a' => 1, 'b' => 2];
echo json_encode($list);
$pointers = [];
foreach($list as $n => $v)
$pointers[] = &$list->$n;
var_dump($pointers);
json 返回 2 项,末尾的指针返回 3 项。有什么问题?
但如果我将对象创建为 stdClass,它会按预期工作。
$list = new stdClass();
$list->a = 1;
$list->b = 2;
echo json_encode($list);
$pointers = [];
foreach($list as $n => $v)
$pointers[] = &$list->$n;
var_dump($pointers);
json 返回 2 项,末尾的指针返回 2 项
【问题讨论】:
-
指针数组返回 2 个项目 ideone.com/yWDVh3 。看看吧。
-
我不太清楚,但这可能与指针有关。如果您在第一个示例中更改为
$list->$n,则您正确有 2 个项目。也许在转换为(对象)时定义了一些额外的指针。需要检查一下。 -
@Ayush 在 php 7 我有这个输出
{"a":1,"b":2}array(3) { [0]=> &int(1) [1]=> &int(1) [2]=> &int(2) }但它在 php 5.6 中工作正常 -
7.1 返回array(2),好像就在7.0.*
-
因为引用调用,$list->$n 工作正常。
标签: php object foreach duplicates