引用类型的数组成员在 foreach 中的 bug

2023-10-13 10:27:25 +08:00
 zzzkkk
$out = [1,2,3,4,5];
$out = array_chunk($out, $k);
foreach($out as &$v){
 $v = array_reverse($v);
}
$out2 = [];
foreach($out as $v){
$out2 = array_merge($out2, $v);
}
var_dump($out2);exit;

应该输出 2 1 4 3 5 但结果是 2 1 4 3 4 3 需要把第二个 foreach $v 改成&$v 才行

768 次点击
所在节点    PHP
1 条回复
Rache1
2023-10-13 10:44:50 +08:00
手册上第一个示例块就说了

PHP: foreach - Manual
https://www.php.net/manual/zh/control-structures.foreach.php

在 foreach 使用了 & 的情况下,你再 foreach 下面再 unset 掉就好了。


$out = [1,2,3,4,5];
$out = array_chunk($out, $k);
foreach($out as &$v){
$v = array_reverse($v);
}

// 👇
unset($v);

$out2 = [];
foreach($out as $v){
$out2 = array_merge($out2, $v);
}
var_dump($out2);exit;

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/981578

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX