使用嵌套循环遍历
本课属于 Coddy PHP 学习旅程的“逻辑与流程”单元。第 30 课,共 68 课。
处理二维数组时,你通常需要处理每一个元素,因此需要遍历每一行,再遍历该行中的每一列。这时嵌套循环就很有用了。你可以在一个循环中嵌套另一个循环,按顺序遍历整个网格结构。
外层循环遍历二维数组的每一行,而内层循环处理当前行中的每个元素。下面说明如何使用 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";
}
}
?>这种嵌套循环模式是完整处理二维数组的基础,无论你是在显示数据、执行计算,还是在整个网格结构中搜索特定值。
挑战
简单你会收到一个输入:一个以 JSON 格式表示教室座位安排的二维数组。每个内部数组表示一排座位,每个元素包含一名学生的姓名,或表示空座位的空字符串。读取输入,将 JSON 字符串转换为二维数组,使用嵌套循环遍历整个座位安排,并按照以下格式打印每名学生的姓名及其位置:Row X, Seat Y: Name
跳过空座位(空字符串),只打印有人就坐的座位信息。行号和座位号都从 1 开始编号(不是从 0 开始)。
输入格式:一行内容,包含一个表示座位安排的 JSON 数组(示例:[["Alice","Bob",""],["","Charlie","Diana"],["Eve","","Frank"]])
预期输出:将每个有人就坐的座位单独打印在一行中,格式为 Row X, Seat Y: Name,其中 X 是行号,Y 是座位号(两者都从 1 开始)
亲手试试
<?php
// 读取 JSON 输入
$input = trim(fgets(STDIN));
// 将 JSON 字符串转换为二维数组
$seating = (array)json_decode($input, true);
// TODO: 在下方编写你的代码
// 使用嵌套循环遍历每一排和每个座位
// 记得跳过空座位,并从 1 开始给排和座位编号
?>这节课包含一个小测验。开始学习即可作答,并记录你的进度。
逻辑与流程中的所有课
自己练习: PHP 在线编译器