これは、配列の配列を取得してシャッフルし、値を親配列の ['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) を追加すると、正常に動作します。返信不要!