我有一个嵌套的数组数组,我想要改组内部数组。我的代码看起来像这样(简化):
$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" } }
正如您在输出中看到的,前两个子数组有效,但第三个子数组在输出中通过引用链接...
在我的完整应用程序中,这最后一个数组链接会导致问题,但我不想解决这个问题,而是想解决这个问题......
干杯!
答案 0 :(得分:2)
这与PHP如何存储对数组元素的引用有关。它不能引用数组的元素,只能引用值。因此,必须将值array('oh snow')
存储在符号表的“插槽”中,然后使$arr
和$a[2]
成为对该值的引用。
要解决此问题,请在循环后unset($arr)
进行修复。这样,只有一个变量引用该值,然后再次将其作为常规数组索引。无论如何,在foreach
之后取消引用是很好的做法,因为有很多这样的问题。