【问题标题】:php foreach duplicate first itemphp foreach 重复第一项
【发布时间】: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


【解决方案1】:

这似乎是 PHP 7.0 的一个奇怪之处,因为它在 7.1 和

您可能不得不这样做:

$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);

【讨论】:

    猜你喜欢
    • 2023-03-09
    • 2020-09-24
    • 2013-01-07
    • 1970-01-01
    • 2019-12-07
    • 2018-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多