###前提・実現したいこと
以下のように「$rand」というキーで配列が作られ、「'追加'」を追加しています。
しかし「$rand」の値が同じとき、2回目以降のループで「'追加'」が追加されなくなってしまいます。
これを解決したいです。
PHP
1 2function getrand(){ 3 $rand = str_shuffle('AB'); 4 return $rand; 5} 6 7$add = 'on'; 8 9$ar = []; 10 11$i = 0; 12while($i < 3){ 13 14 $rand = getrand(); 15 16 $ar['fruits'][$rand][] = [ 17 'name' => 'apple', 18 'color' => 'red' 19 ]; 20 21 if( $add == 'on' ){ 22 $ar['fruits'][$rand][0]['add'] = '追加'; // これが1回しか追加されない 23 } 24 25 $i++; 26} 27 28var_dump($ar);
###実際の例
たとえば上を実行して次の配列が得られたときに、["AB"]の配列を見てみてください。
[0]には「'追加'」が追加されていますが、
[1]には追加されなくなるということです。
そして["BA"]の配列には追加されています。
これが冒頭に書いた、「$rand」の値が同じとき、2回目以降のループで「'追加'」が追加されなくなる。という現象です。
PHP
1array(1) { 2 ["fruits"]=> 3 array(2) { 4 ["AB"]=> 5 array(2) { 6 [0]=> 7 array(3) { 8 ["name"]=> 9 string(5) "apple" 10 ["color"]=> 11 string(3) "red" 12 ["add"]=> 13 string(6) "追加" 14 } 15 [1]=> 16 array(2) { 17 ["name"]=> 18 string(5) "apple" 19 ["color"]=> 20 string(3) "red" 21 } 22 } 23 ["BA"]=> 24 array(1) { 25 [0]=> 26 array(3) { 27 ["name"]=> 28 string(5) "apple" 29 ["color"]=> 30 string(3) "red" 31 ["add"]=> 32 string(6) "追加" 33 } 34 } 35 } 36}
2回目以降のループにも「'追加'」を追加したいときは、どうしたらいいのでしょうか?(ちなみにwhileのループ数は上の例では3回ですが、実際には未定です。)
###どういう結果にしたいのか
を補足させていただきますと、こんな感じの配列にしたいです。上の配列と比べて「これ」の部分が変わっているのがわかるかと思います。
(ただし配列はランダムに生成されるなので、あくまで上の配列の場合ならこうしたい、という例です。)
PHP
1array(1) { 2 ["fruits"]=> 3 array(2) { 4 ["AB"]=> 5 array(2) { 6 [0]=> 7 array(3) { 8 ["name"]=> 9 string(5) "apple" 10 ["color"]=> 11 string(3) "red" 12 ["add"]=> 13 string(6) "追加" 14 } 15 [1]=> 16 array(3) { 17 ["name"]=> 18 string(5) "apple" 19 ["color"]=> 20 string(3) "red" 21 ["add"]=> // これ 22 string(6) "追加" // これ 23 } 24 } 25 ["BA"]=> 26 array(1) { 27 [0]=> 28 array(3) { 29 ["name"]=> 30 string(5) "apple" 31 ["color"]=> 32 string(3) "red" 33 ["add"]=> 34 string(6) "追加" 35 } 36 } 37 } 38}
回答3件
あなたの回答
tips
プレビュー