二重ループによる反復処理
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次元配列を完全に処理するために不可欠です。
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
チャレンジ
簡単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から開始することを忘れないでください
?>このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。