ログイン

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

PHPの問題

PHP

連想配列を操作しよう

問題

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

自分の環境に書くコード

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

今回はコールバック関数ではなくクロージャ(無名関数)を利用した。
一部の関数では必須なので覚えておこう。
完了にする!
1.PHPについての説明と表示
続きの動画を見たい方は公式LINEから「PHP」と送信すると動画が見れます。
LINEの友達追加でお役立ち動画をGET!!