前提
背景
事象(やりたいこと)
以下問題を解きたい。
問題
$age_list = array('A' => 23, 'B' => 31, 'C' => 18 );
上記配列がある状態で
3名の中で最も年上なのは「B」さんで「31」歳です。
という出力結果を導き出す
このように最高齢者のキーをに、要素をmax_nameに保持させておくだけ、というものだったので 新しい繰り返し処理と条件分岐の引き出しが増えたと思います。
試したこと
1、max関数を使う
配列の中から最高年齢を取り出し、その年齢者を「文字列で」echoしました。
foreach ($age_list as $list => $val) { $max_age = max($val); }
echo " 3名の中で最も年上なのは「B」さんで「" . $max_age . "」歳です。";
結果
一応、出力は可能。但し、これではあまりスマートではない…
2、$max_nameと$max_ageをforeach内で定義
以下実装。
// 最高齢者 $max_age = 0; $max_name = ''; foreach ($age_list as $name => $age) { // 現在の最高齢者を超えたら更新 if ($max_age < $age) { $max_age = $age; $max_name = $name; } } echo " 3名の中で最も年上なのは「" . $max_name . "」さんで「" . $max_age . "」歳です。"
結果
こちらも正しく出力。
$max_nameで最高年齢者を定義でき、配列内の内容が変わっても最高年齢者の名前をいちいち変える必要がなくなる。
所感
foreachによる配列の操作は非常に苦手意識あり。
これから入るプロジェクトはLaravelを使う。
配列でのデータの受け渡しがすぐにイメージできるようにしておく必要がある。