首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么php5和php7之间的数组遍历不同

为什么php5和php7之间的数组遍历不同
EN

Stack Overflow用户
提问于 2017-08-28 20:55:49
回答 1查看 60关注 0票数 0

考虑一些数组:

代码语言:javascript
复制
$data = [
    "k0"=>"v0",
    "k1"=>"v1",
    "k2"=>"v2",
    "k3"=>"v3",
    "k4"=>"v4",
];

遍历数组$data和打印数组$result_1

代码语言:javascript
复制
$result_1 = [];
while (key($data)) {
    $result_1[key($data)] = current($data);
    next($data);
}
print_r($result_1);

//Then perform the same operation in a function supplying the same array $data as argument 
//(mind that the internal pointer of $data is at the end):

traverse($data);

function traverse($arr){
    $result_2 = [];
    while (key($arr)) {
        $result_2[key($arr)] = current($arr);
        next($arr);
    }
    print_r($result_2);
}

如果在php-5.5上运行上述代码,$result_1和$result_2是相同的:

代码语言:javascript
复制
//Array ( [k0] => v0 [k1] => v1 [k2] => v2 [k3] => v3 [k4] => v4 ) 

如果在php-7.1上运行,$result_1与上面的相同,但$result_2是空的:

代码语言:javascript
复制
//Array ( )

为什么php-5.5和php-7.1之间的数组遍历不同?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-12 16:04:44

我在PHP ::Bug #77014中注册了一个bug。正确/有意的行为是PHP中的一种行为。我引用了nikic@php.net的回答

这种行为是有意的。将数组传递给函数不会改变内部数组指针的位置。我相信PHP 5的行为是某种类型的key()的工件,它通过引用接受数组并在那里触发分离。 如果希望确保从一开始就迭代数组,而不是从内部数组指针的前一个位置迭代数组,则可以执行一个显式调用来重置()。 (如果可能的话,我建议完全离开这些功能。如果涉及复杂的迭代模式,ArrayIterator可能是另一种选择。)

谜团解开了我想。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45927238

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档