0

这是测试代码,旨在获取一组数组,将它们打乱,并将值分配给父数组中的 ['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 在我的嵌套数组上无法正常工作

后来又说:

是的。在 foreach() 循环之后添加了 unset($r) 并且它工作正常。无需回复!

4

1 回答 1

1

刚刚看到这个提供了答案:

PHP shuffle 在我的嵌套数组上无法正常工作

因此,只需在 foreach() 循环之后添加 unset($r) ,它就可以正常工作。

于 2013-07-18T16:20:32.447 回答