php foreach重复第一项

php foreach重复第一项,php,object,foreach,duplicates,Php,Object,Foreach,Duplicates,对于从数组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,它

对于从数组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个项目。对于PHP7.0来说,这似乎是一个奇怪的现象,因为它在7.1和<7中的工作与预期一样

您可能需要执行以下操作:

$list = (object)['a' => 1, 'b' => 2];
echo json_encode($list);

$pointers = [];
$items = get_object_vars($list);

foreach($items as $key => $val){
    $pointers[] = &$list->$key;
}


var_dump($pointers);

PHP7.0似乎有点奇怪,因为它在7.1和<7中都能正常工作

您可能需要执行以下操作:

$list = (object)['a' => 1, 'b' => 2];
echo json_encode($list);

$pointers = [];
$items = get_object_vars($list);

foreach($items as $key => $val){
    $pointers[] = &$list->$key;
}


var_dump($pointers);

指针数组返回2项。检查一下。我不知道确切情况,但这可能与指针有关。如果在第一个示例中更改为
$list->$n
,则正确地有2项。可能在强制转换到(对象)时定义了一些额外的指针。需要检查一下。@Ayush在PHP7中我有一个输出
{“a”:1,“b”:2}数组(3){[0]=>&int(1)[1]=>&int(1)[2]=>&int(2)}
但在PHP5.67.1中效果很好,返回数组(2),似乎正好在7.0中。*这是因为引用调用,$list->$n效果很好。指针数组返回2项。检查一下。我不知道确切情况,但这可能与指针有关。如果在第一个示例中更改为
$list->$n
,则正确地有2项。可能在强制转换到(对象)时定义了一些额外的指针。需要检查一下。@Ayush在PHP7中我有这个输出
{“a”:1,“b”:2}数组(3){[0]=>&int(1)[1]=>&int(1)[2]=>&int(2)}
但是它在PHP5.67.1中运行良好,返回的数组(2)似乎正好在7.0中。*这是因为引用调用,$list->$n运行良好。