下記のコード
①パターン1で添字なしで、実行する場合、2回目のループで得られる配列 $finalには1回目の配列の要素が残ってしまいます。
これは同じ配列に上書きされてしまっているからであると考え
A) 下記のように各配列をループのたびに初期化すると、一つ目のループの配列が消えてしまいます。
for ($i = 0; $i < count($ary); $i++)
{
$result=array();
$final=array();
$result[]=$ary[$i]*10;
$result[]=$ary[$i]*100;
$final[]=$result;
}
B) 一方で下記のように、一つ目のループで完成する$final=array();だけ初期化した場合、一つ目のループの配列はなにも残らず、2つめのループの配列に全ての要素が含まれてしまいます。
for ($i = 0; $i < count($ary); $i++)
{
$final=array();
$result[]=$ary[$i]*10;
$result[]=$ary[$i]*100;
$final[]=$result;
}
C) 一方で、下記のように$result=array();だけ初期化すると正しく動作します。
for ($i = 0; $i < count($ary); $i++)
{
$result=array();
$result[]=$ary[$i]*10;
$result[]=$ary[$i]*100;
$final[]=$result;
}
【質問】ここでご質問ですが、これらの動作が非常に不思議です。
最終的に得たい配列ノ$finalについて、上書きされずに1回目と2回目のループをそれぞれ多次元配列として保持したい場合、B)で実現できると考えておりました。これはphpのどのような仕様によるものがご存知であればご教示願います。
②同じ配列では上書きされてしまうので、それぞれユニークな添字をつければ、上書きされないのではと考え、$key=array("A","B");をつけて添え字つきでループさせても、後半の配列に前半の配列の要素が残ってしまいます。
【質問】このように添え字を使ってそれぞれユニークな連想多次元配列にすれば上書きされないと思っていたのですが、なぜ実現できないのかをご教示願えますでしょうか?
PHP
1<?php 2パターン1) 3 4$ary=array(10,20); 5$key=array("A","B"); 6for ($i = 0; $i < count($ary); $i++) { 7 8 $result[]=$ary[$i]*10; 9 $result[]=$ary[$i]*100; 10 $final[]=$result; 11} 12var_dump($final); 13 14パターン2) 15 16$ary=array(10,20); 17$key=array("A","B"); 18for ($i = 0; $i < count($ary); $i++) { 19 20 $result=array(); 21 $result=array(); 22 $result[]=$ary[$i]*10; 23 $result[]=$ary[$i]*100; 24 $final[$key[$i]]=$result; 25} 26var_dump($final); 27?>
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/02/15 02:37
2017/02/15 02:39