ログイン
問題7

連想配列を操作しよう

アイコン画像

問題7:連想配列を操作しよう

テストの平均点の高い順に画面に表示しよう

エディターのアイコンあらかじめエディタに書くコード

                $list[] = ['name' => 'A', 'test' => [10, 3, 5]];
$list[] = ['name' => 'B', 'test' => [7, 9]];
$list[] = ['name' => 'C', 'test' => []];
$list[] = ['name' => 'D', 'test' => ""];
$list[] = ['name' => 'E', 'test' => [7]];
$list[] = ['name' => 'F', 'hoge' => []];
¥PHP¥
              

ブラウザのアイコン期待する画面

B: 8
E: 7
A: 6
C: 0
D: 0
F: 0

タグアイコン解答ソースコード

              $list[] = ['name' => 'A', 'test' => [10, 3, 5]];
$list[] = ['name' => 'B', 'test' => [7, 9]];
$list[] = ['name' => 'C', 'test' => []];
$list[] = ['name' => 'D', 'test' => ""];
$list[] = ['name' => 'E', 'test' => [7]];
$list[] = ['name' => 'F', 'hoge' => []];
for ($i = 0; $i < count($list); $i++) {
    $item = $list[$i];
    $total = 0;
    $count = 0;
    if (isset($item['test']) && is_array($item['test'])) {
        foreach ($item['test'] as $point) {
            $total += $point;
            $count++;
        }
    }
    if ($count) {
        $list[$i]["average"] = $total / $count;
    } else {
        $list[$i]["average"] = 0;
    }
}
usort($list, function($a, $b) {
    return $b["average"] - $a["average"];
});
foreach ($list as $item) {
    echo "{$item["name"]}: {$item["average"]}<br>\n";
}
¥PHP¥
            

コメントのアイコン解説

配列に配列を格納できるように連想配列にも連想配列や配列が格納できるぞ。
今回の課題はtestが存在しないケース、配列ではないケースがある。
issetやis_array等を駆使して処理できるデータ形式になっているか確認しよう。

PHPを含む大部分のプログラム言語では0除算はエラーとなる。
除算する場合は0で割らないように注意しよう。

連想配列は自由にキーの付け外しが可能となっている。
ここでは平均点を格納して後の処理につなげるようにしている。

usortにソートロジックを実装した関数を渡そう。
コールバック関数でソートの基準値を返却するとリストを並び替えてくれるぞ。

今回はコールバック関数ではなくクロージャ(無名関数)を利用した。
一部の関数では必須なので覚えておこう。
ログインして解答を見る
完了にする!
twitterのアイコン
活動記録をTweetする
1.PHPについての説明と表示
続きの動画を見たい方は公式LINEから「PHP」と送信すると動画が見れます。
PHPを学ぶなら現役エンジニア監修「甲賀コース」
LINEの友達追加でお役立ち動画をGET!!

閉じる