Menu
Coddy logo textTech

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

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

2次元配列を扱う際、すべての要素を処理する必要があることがよくあります。これには、各行を訪れ、次にその行内の各列を訪れる必要があります。ここでネストされたループ(入れ子のループ)が不可欠になります。あるループを別のループの中で使用することで、グリッド構造全体を体系的に走査します。

外側のループは2次元配列の各行を反復処理し、内側のループは現在の行内の各要素を処理します。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";
    }
}
?>

この二重ループのパターンは、データの表示、計算の実行、またはグリッド構造全体にわたる特定の値の検索など、2次元配列を完全に処理するために不可欠です。

quiz icon腕試し

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

quiz icon腕試し

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

quiz icon腕試し

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

challenge icon

チャレンジ

簡単

1つの入力を受け取ります。それはJSON形式の教室の座席配置を表す2次元配列です。各内部配列は座席の列を表し、各要素には生徒の名前、または空席の場合は空の文字列が含まれています。入力を読み込み、JSON文字列を2次元配列に変換し、入れ子になったループ(nested loops)を使用して座席配置全体を反復処理し、各生徒の名前とその位置を次の形式で出力してください:Row X, Seat Y: Name

空席(空の文字列)はスキップし、座席が埋まっている場合の情報のみを出力してください。列(Row)と座席(Seat)の番号は、0からではなく1から開始する必要があります。

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

期待される出力: 各座席の情報が Row X, Seat Y: Name の形式で個別の行に出力されます。ここで、Xは列番号、Yは座席番号です(どちらも1から始まります)。

チートシート

2次元配列のすべての要素を処理するには、ネストされたループを使用します。外側のループで行を反復処理し、内側のループで行内の各要素を処理します。

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";
    }
}
?>

自分で試してみよう

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

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

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


?>
quiz icon腕試し

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

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