【发布时间】:2017-08-28 20:55:49
【问题描述】:
考虑一些数组:
$data = [
"k0"=>"v0",
"k1"=>"v1",
"k2"=>"v2",
"k3"=>"v3",
"k4"=>"v4",
];
遍历数组 $data 并打印数组 $result_1
$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是一样的:
//Array ( [k0] => v0 [k1] => v1 [k2] => v2 [k3] => v3 [k4] => v4 )
如果在 php-7.1 上运行 $result_1 与上面相同但 $result_2 为空:
//Array ( )
为什么 php-5.5 和 php-7.1 的数组遍历不同?
【问题讨论】:
-
php.net/manual/en/migration54.new-features.php $var = []; php5 的初始版本中没有引入语法。
-
一行
$result_2[key($arr)] = current($data);,我想你的意思是$result_2[key($arr)] = current($arr);,对吧? -
@mishamosher - 你是对的,当然,更新了代码
-
@vess 您对为每个 PHP 版本产生相同输出的替代代码更感兴趣,或者对为什么会发生这种情况的技术解释更感兴趣?后一个我还是想不通。
-
@mishamosher - 谢谢。我的代码是在 php-5.6(旧 WAMP)上开发的,但由于某种原因,我不得不在生产服务器上迁移到 php-7。在我发现这个问题之前它不会正常运行。当然,更改了代码,现在它运行正常。所以我的问题是 academic - 在文档中没有找到任何解释......也许其他人不会浪费几个小时来调试?