1

我有一个嵌套的数组数组,我想打乱内部数组。我的代码看起来像这样(简化):

$a = array(array('banana', 'peach'), array('ding', 'dong'), array('oh snow'));
foreach ($a as &$arr) {
    shuffle($arr);
}
var_dump($a);

var_dump 输出以下内容:

array(3) { [0]=> array(2) { [0]=> string(5) "peach" [1]=> string(6) "banana" } [1]=> array(2) { [0]=> string(4) "ding" [1]=> string(4) "dong" } [2]=> &array(1) { [0]=> string(7) "oh snow" } } 

正如您在输出中看到的,前两个子数组有效,但第三个子数组在输出中通过引用链接...

在我的完整应用程序中,最后一个数组链接会导致问题,但我不想解决这个问题,而是想修复这个 shuffle 事情......

干杯!

4

1 回答 1

2

这与 PHP 如何存储对数组元素的引用有关。它不能引用数组的元素,只能引用值。因此,它必须将值存储在array('oh snow')符号表的“槽”中,然后$arr对该$a[2]值进行引用。

为了解决这个问题,unset($arr)在循环之后。这样,只有一个变量引用了该值,然后将再次将其设为常规数组索引。无论如何,在 a 之后取消设置引用foreach是一种很好的做法,因为有很多这样的陷阱。

于 2012-07-04T14:14:30.537 回答