phpの繰り返し文での配列でやらかした


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] => 失敗! )

になります。

最後に

ここまで読んでくれた方が僕と同じやらかしをしないように、お祈りしています。