LoginSignup
0

More than 3 years have passed since last update.

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

Last updated at Posted at 2019-07-05

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

になります。

最後に

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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0