这是测试代码,用于获取数组数组,对它们进行混洗,并将值分配给父数组中的['data']元素,然后删除一个元素。只是为了说明一点,这是非常基本的:
$g = //some array;
shuffle($g);
foreach ($g as &$r) {
shuffle($r);
}
$tables[] = array('name' => 'table1', 'data' => $g);
shuffle($g);
foreach ($g as &$r) {
shuffle($r);
}
$tables[] = array('name' => 'table2', 'data' => $g);
shuffle($g);
foreach ($g as &$r) {
shuffle($r);
}
$tables[] = array('name' => 'table3', 'data' => $g);
unset($tables[0]['data'][0][0]);
print_r($tables);
当$ g是一个包含多个元素的数组,并且嵌套数组有多个元素时,它可以正常工作。删除数据元素中第一个嵌套数组中的第一个值:
$g = array('12' => array('11111', '22222'), '56' => array('55555', '66666'));
// Output
Array
[0] => Array
[name] => table1
[data] => Array
[0] => Array
[1] => 66666
[1] => Array
[0] => 11111
[1] => 22222
[1] => Array
[name] => table2
[data] => Array
[0] => Array
[0] => 11111
[1] => 22222
[1] => Array
[0] => 55555
[1] => 66666
[2] => Array
[name] => table3
[data] => Array
[0] => Array
[0] => 55555
[1] => 66666
[1] => Array
[0] => 11111
[1] => 22222
当$ g是包含一个元素的数组时,将删除所有数据元素中的第一个元素,这是不期望的:
$g = array('12' => array('11111', '22222'));
// Output
Array
[0] => Array
[name] => table1
[data] => Array
[0] => Array
[1] => 22222
[1] => Array
[name] => table2
[data] => Array
[0] => Array
[1] => 22222
[2] => Array
[name] => table3
[data] => Array
[0] => Array
[1] => 22222
$g = array('12' => array('11111'));
// Output
Array
[0] => Array
[name] => table1
[data] => Array
[0] => Array
(Empty)
[1] => Array
[name] => table2
[data] => Array
[0] => Array
(Empty)
[2] => Array
[name] => table3
[data] => Array
[0] => Array
(Empty)
我看不出这是怎样预期的行为。这是漫长的一天。那么有人能让我摆脱痛苦并告诉我在这里缺少什么吗?
感谢。
随后: 刚看到这可能是我的答案:
PHP shuffle not working like expected on my nested array
稍后:
是的,确实如此。在foreach()循环之后添加了未设置($ r)并且它工作正常。无需回复!
答案 0 :(得分:1)
刚看到这个提供了答案:
PHP shuffle not working like expected on my nested array
所以在foreach()循环之后添加了未设置($ r),它运行正常。