PHP shuffle在我的嵌套数组上没有像预期的那样工作

时间:2012-07-04 13:57:25

标签: php

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

$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" } } 

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

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

干杯!

1 个答案:

答案 0 :(得分:2)

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

要解决此问题,请在循环后unset($arr)进行修复。这样,只有一个变量引用该值,然后再次将其作为常规数组索引。无论如何,在foreach之后取消引用是很好的做法,因为有很多这样的问题。