💡 今日の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つのポイント

1max($配列) と min($配列) で初期値バグを防ぐ

配列を1つ渡すだけで、要素の中から一番大きい値・小さい値を自動で探して返してくれます。仮の初期値(0 など)を自分で置く必要がないため、マイナス値を含むデータでも正確に集計できます。

2PHP 8以降は空配列 [] を渡すと ValueError になる

空の配列をそのまま max() や min() に渡すと、ValueError が発生して処理が止まります。検索結果などを集計するときは、直前に if ($scores === []) で空チェックを入れましょう。

3max(0, $金額) のように数値を直接並べる使い方も便利

配列だけでなく、max($a, $b) のようにカンマ区切りで複数の値を直接比べることもできます。たとえば割引計算で max(0, $price - $discount) と書けば、合計額がマイナスになるのを1行で防げます。

4. 1分ミニチャレンジ

🚀 手を動かしてみよう

正解コードの $scores を [-3, 5, -8, 2] に書き換えて実行してみましょう。マイナス値が混ざっていても、最高 5・最低 -8・点差 13 と正しく計算されます。