你可以直接在一个循环体中嵌套另一个循环,就像这样:
for ($i = 1; $i < 3; $i = $i + 1) {
for ($j = 1; $j < 4; $j = $j + 1) {
for ($k = 1; $k < 3; $k = $k + 1) {
print "I: $i, J: $j, K: $k\n";
}
}
}
上面的代码输出:
I: 1, J: 1, K: 1
I: 1, J: 1, K: 2
I: 1, J: 2, K: 1
I: 1, J: 2, K: 2
I: 2, J: 1, K: 1
I: 2, J: 1, K: 2
I: 2, J: 2, K: 1
I: 2, J: 2, K: 2
这种情况下用break就有点复杂了,因为它只跳出离它最近的循环:
for ($i = 1; $i < 3; $i = $i + 1) {
for ($j = 1; $j < 3; $j = $j + 1) {
for ($k = 1; $k < 3; $k = $k + 1) {
print "I: $i, J: $j, K: $k\n";
break;
}
}
}
这次的输出是:
I: 1, J: 1, K: 1
I: 1, J: 2, K: 1
I: 2, J: 1, K: 1
I: 2, J: 2, K: 1
如上所示,$k只循环了一次就被打断了,而其他循环都循环了若干次。你可以尝试在break后加个数字,如break 2来跳出两次循环或switch - case语句。例如:
for ($i = 1; $i < 3; $i = $i + 1) {
for ($j = 1; $j < 4; $j = $j + 1) {
for ($k = 1; $k < 3; $k = $k + 1) {
print "I: $i, J: $j, K: $k\n";
break 2;
}
}
}
会输出
I: 1, J: 1, K: 1
I: 2, J: 1, K: 1
这次,整个循环只执行了两次,因为$k内部调用了break 2,跳出了$k和$j的循环。如果换成break 3的话,将会跳出全部三个循环,继续下面的代码。
需要注意的是,break在switch - case语句和循环中都起作用,例如:
for ($i = 1; $i < 3; $i = $i + 1) {
for ($j = 1; $j < 4; $j = $j + 1) {
for ($k = 1; $k < 3; $k = $k + 1) {
switch($k) {
case 1:
print "I: $i, J: $j, K: $k\n";
break 2;
case 2:
print "I: $i, J: $j, K: $k\n";
break 3;
}
}
}
}
break 2跳出了switch - case和$k循环,而break 2跳出了switch - case和两层循环。如果想要从switch - case中完全跳出循环,则需要break 4了。