Menu
Coddy logo textTech

二重ループによる反復処理

CoddyのPHPジャーニー「論理とフロー」セクションの一部。レッスン 30/68。

2D array を扱うときは、すべての要素を1つずつ処理する必要があることがよくあります。そのためには各 row を訪れ、その row 内の各列を訪れる必要があります。ここで nested loops が不可欠になります。1つの loop を別の loop の中に配置して、grid 構造全体を体系的にたどります。

外側のループは2D arrayの各rowを反復処理し、内側のループは現在のrow内の各要素を処理します。これはforeachループで次のように動作します。

<?php
$schedule = [
    ["Meeting", "Lunch", "Presentation"],
    ["Training", "Review", "Planning"],
    ["Workshop", "Break", "Demo"]
];

foreach ($schedule as $day) {
    foreach ($day as $appointment) {
        echo $appointment . "\n";
    }
}
?>

インデックスをより細かく制御する必要がある場合は、従来の for ループも使用できます。この方法では、行と列の両方の位置にアクセスできます。

<?php
for ($row = 0; $row < count($schedule); $row++) {
    for ($col = 0; $col < count($schedule[$row]); $col++) {
        echo "Day " . ($row + 1) . ", Time " . ($col + 1) . ": " . $schedule[$row][$col] . "\n";
    }
}
?>

この入れ子になったループパターンは、データの表示、計算の実行、またはグリッド構造全体からの特定の値の検索など、2D配列を完全に処理するうえで基本となります。

challenge icon

チャレンジ

簡単

入力として、教室の座席配置を表すJSON形式の2D arrayを1つ受け取ります。各内側のarrayは座席の1つの行を表し、各要素には生徒の名前または空席を表す空のstringが含まれます。入力をReadし、JSON stringを2D arrayにConvertし、nested loopsを使用してseating配置全体をiterateし、各生徒の名前とその位置を次の形式で出力します: Row X, Seat Y: Name

空席(empty strings)はskipし、occupied seatsの情報のみを出力します。rowsとseatsには、0ではなく1からstartingするnumberを付けます。

入力形式: seating配置を表すJSON arrayを含む1行(例: [["Alice","Bob",""],["","Charlie","Diana"],["Eve","","Frank"]]

期待される出力: 各occupied seatを、Row X, Seat Y: Nameの形式で個別の行に出力します。Xはrow number、Yはseat numberを表し、どちらも1からstartingします。

自分で試してみよう

<?php
// JSON入力を読み取る
$input = trim(fgets(STDIN));

// JSON文字列を2D配列に変換する
$seating = (array)json_decode($input, true);

// TODO: 以下にコードを書いてください
// ネストしたループを使って行と座席を反復処理する
// 空の座席をスキップし、行/座席に1から番号を付けることを忘れないでください


?>
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

論理とフローのすべてのレッスン

自分で練習してみよう: PHPオンラインコンパイラ