0

これは、配列の配列を取得してシャッフルし、値を親配列の ['data'] 要素に割り当ててから、1 つの要素を削除するように設計されたテスト コードです。ポイントを説明するだけで非常に基本的です。

$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 が 1 つの要素を持つ配列の場合、すべてのデータ要素の最初の要素が削除されますが、これは予期されていません。

$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 シャッフルが期待どおりに機能しない

後でもう一度:

そうでした。foreach() ループの後に unset($r) を追加すると、正常に動作します。返信不要!

4

1 に答える 1

1

答えを提供するこれを見ただけです:

ネストされた配列で PHP シャッフルが期待どおりに機能しない

したがって、 foreach() ループの後に unset($r) を追加すると、正常に動作します。

于 2013-07-18T16:20:32.447 に答える