phpの繰り返し文の配列でやらかしたので、投稿します。
いきなりですが、問題です!!!
下記のコードで、print_r($result_code)
で出力されるものはどれでしょうか?
(PHPのバージョンは5.6
です)
$execution_results = ['success','failure'];
foreach ($execution_results as $execution_result) {
if ($execution_result == 'success') {
$result_code['success_code'] = '成功!';
}
if ($execution_result == 'failure') {
$result_code['failure_code'] = '失敗!';
}
print_r($result_code);
}
1.
ループの1回目:Array ( [success_code] => 成功! )
ループの2回目:Array ( [failure_code] => 失敗! )
2.
ループの1回目:Array ( [success_code] => 失敗! )
ループの2回目:Array ( [failure_code] => 成功! )
3.
ループの1回目:Array ( [success_code] => 成功! )
ループの2回目:Array ( [failure_code] => 成功! )
4.
ループの1回目:Array ( [success_code] => 失敗! )
ループの2回目:Array ( [failure_code] => 失敗! )
正解は...
ありません!!!
察しの良い方は、わかったかもしれませんが、
(ん?1.
だろ)って思ったあなた
僕と同じでやらかすかもしれません。
実際に出力されるものは、下記になります。
ループの1回目:Array ( [success_code] => 成功! )
ループの2回目:Array ( [success_code] => 成功! [failure_code] => 失敗! )
解説
繰り返し文の中で、配列をループ毎に初期化していないので、前回のループで、追加された値が配列に残っています。
1回目のループでは、[success_code] => 成功!
が$result_code
に追加されて、
2回目のループでは、[failure_code] => 失敗!
が$result_code
に追加されます。
なので、2回目に出力されるのは、
Array ( [success_code] => 成功! [failure_code] => 失敗! )
になります。
最後に
ここまで読んでくれた方が僕と同じやらかしをしないように、お祈りしています。