💡 今日の3行まとめ
- 配列から最大値・最小値を取り出すときは
max($配列)とmin($配列)を使う foreachや仮の初期値($min = 0など)が不要になり、手書きループの判定バグを防げる- 空の配列
[]を渡すとエラーで止まるため、直前に空チェックを入れると安全
1. 今日のお題とゴール
小テストの点数が入った配列から「最高点」「最低点」「点差(最高点 − 最低点)」を求めて画面に出力します。
- 点数リスト
[72, 95, 60, 88]から最高点と最低点を取得する - 配列が空(
[])のときはエラーで止めずメッセージを表示する - 最高点・最低点と、その点差を計算して出力する
// 期待する出力例
最高点: 95点
最低点: 60点
点差: 35点
2. ❌ やりがちなNGコード vs ⭕ コピペで動く正解コード
❌ やりがちなNGコードBefore
<?php
$scores = [72, 95, 60, 88];
$max = 0;
$min = 0; // ← 全員0点より高いため更新されない!
foreach ($scores as $score) {
if ($score > $max) $max = $score;
if ($score < $min) $min = $score;
}
echo "最高点: {$max}点 / 最低点: {$min}点\n";
foreach で比較コードを手書きすると長くなるうえ、$min = 0 のように初期値の決め方を誤ると「最低点: 0点」になる定番バグが起きます。マイナスの気温データなどでも同じミスが起きがちです。
⭕ コピペで動く正解コード(PHP 8.3+)After
<?php
declare(strict_types=1);
// 1. テストの点数リストを用意する
$scores = [72, 95, 60, 88];
// 2. 空の配列を渡すと ValueError になるため事前チェック
if ($scores === []) {
echo "集計するデータがありません。\n";
exit;
}
// 3. max() と min() で最高点・最低点を1行ずつ取得
$highest = max($scores);
$lowest = min($scores);
$spread = $highest - $lowest;
// 4. 集計結果をわかりやすく出力する
echo "最高点: {$highest}点\n";
echo "最低点: {$lowest}点\n";
echo "点差: {$spread}点\n";
3. ここだけ押さえる!3つのポイント
1
max($配列) と min($配列) で初期値バグを防ぐ配列を1つ渡すだけで、要素の中から一番大きい値・小さい値を自動で探して返してくれます。仮の初期値(0 など)を自分で置く必要がないため、マイナス値を含むデータでも正確に集計できます。
2PHP 8以降は空配列
[] を渡すと ValueError になる空の配列をそのまま max() や min() に渡すと、ValueError が発生して処理が止まります。検索結果などを集計するときは、直前に if ($scores === []) で空チェックを入れましょう。
3
max(0, $金額) のように数値を直接並べる使い方も便利配列だけでなく、max($a, $b) のようにカンマ区切りで複数の値を直接比べることもできます。たとえば割引計算で max(0, $price - $discount) と書けば、合計額がマイナスになるのを1行で防げます。
4. 1分ミニチャレンジ
🚀 手を動かしてみよう
正解コードの $scores を [-3, 5, -8, 2] に書き換えて実行してみましょう。マイナス値が混ざっていても、最高 5・最低 -8・点差 13 と正しく計算されます。