迴圈
電腦最厲害的,就是做重複做一模一樣流程的事情
迴圈就是幫你一直重複做某一件事情的關鍵語法
假設我們今天要印出1~100,人工一個數字一個數字打可能還打得完
但是要印出1~100000怎麼辦?
人工去打也太浪費時間了,這時候就會交給迴圈去做處理
而迴圈基本上分2種,while
跟for
,其他的是這兩種的變形
while迴圈
直接看while
迴圈的語法:
<?php
while(條件){
做某些事;
}
?>
while
迴圈的觀念很簡單,while()
的()
內可以放「一或多個條件」
當條件為true
時,迴圈內的程式碼,就會執行一次
執行一次之後,再判斷一次條件,如果條件依然是true
,就再執行一次
一直重複執行,直到()
內的條件為false
看一下範例
<?php
$i = 1;
while($i < 10){
echo $i++;//輸出$i,並且每次+1
}
//output:123456789
?>
這邊要注意一下,輸出的部分是1~9,沒有10,因為$i = 10
時,while
會判斷$i < 10
是false
,於是就會結束迴圈
所以如果這樣子,迴圈就不會執行,因為一開始的條件就是false
了
<?php
$i = 10;
while($i < 10){
echo $i++;
}
//output:
?>
do...while迴圈
do...while
迴圈是while
迴圈的變形
不一樣的地方是,while
每次都要判斷一次,條件為true
才執行,第一次也不例外do...while
則是第一次無論如何會執行一次,第二次開始才判斷條件是否要執行
也可以說do...while
就是一定會先執行一次迴圈的while
do...while
的語法:
<?php
do{
做某些事;
}while(條件);
?>
要注意一下while()
後面需要加上;
看一下範例:
<?php
$i = 10;
do{
echo $i++; //輸出$i,並且每次+1
}
while($i < 10);
//output:10
?>
這個範例其實跟while
迴圈的最後一個範例一樣,只是改成用do...while
來寫
所以第一次一定會執行,之後由於$i < 10
為false
,迴圈就結束了
for迴圈
for
迴圈的語法:
<?php
for(表達式1;表達式2;表達式3){
做某些事;
}
?>
- 表達式1:
迴圈最一開始時會執行表達式1,整個迴圈只會執行一次表達式1
通常會用來設定變數初始值
- 表達式2:
在每次迴圈一開始進行條件判斷,判斷結果為true
就繼續執行,false
就停止迴圈
- 表達式3:
迴圈執行一次的最後,在執行第二次之前,就會執行一次表達式3
通常會用來改變數值(更改與表達式2的條件有關的變數的數值)
所以整個迴圈會是這樣執行的(假設這回圈只執行2次)
- 表達式1 - 初始化變數
- 表達式2 - 判斷條件,結果是
true
- 迴圈內程式碼
- 表達式3 - 更改數值
- 表達式2 - 判斷條件,結果是
true
- 迴圈內程式碼
- 表達式3 - 更改數值
- 表達式2 - 判斷條件,結果是
false
- 結束
講這麼多,看範例最直接
<?php
for($i=1;$i<10;$i++){
echo $i;
}
//output:123456789
?>
首先$i = 1
,然後判斷$i < 10
是true
,就執行echo $i
,把$i
印出來,最後再把$i
增加1,變成2
接著判斷$i < 10
是true
,再執行echo $i
,把$i
印出來,最後再把$i
增加1,變成3
這樣的模式一直重複...
最後$i
的值被變成10時,$i < 10
是false
,迴圈就結束了
第二個範例~,還不熟悉的可以像是上面這樣拆解看看執行流程
<?php
for($i=0;$i<10;$i+=2){
echo $i;
}
//output:02468
?>
foreach迴圈
在PHP中,foreach
基本上都是用在取出陣列元素的值
取出陣列元素的值for
迴圈其實也做得到,但使用foreach
不需要寫初始化變數、判斷式、每次加固定的數值的程式碼...
總之foreach
簡化了for
迴圈的語法,變得更簡潔、清楚,大概是這樣
foreach
一共有2種形式:
- 取得索引(key)&值(value)
<?php
foreach($array as $key => $value){
做一些處理;
}
?>
- 只拿出值(value)
<?php
foreach($array as $value){
做一些處理;
}
?>
Example~
<?php
$array = ['A'=>'apple','B'=>'Bang','C'=>'cow北','D'=>'D頭'];
foreach($array as $key => $value){
echo 'key:'.$key.',value:'.$value;
}
/*output:
key:A,value:apple
key:B,value:Bang
key:C,value:cow北
key:D,value:D頭
*/
foreach($array as $value){
echo 'value'.$value;
}
/*output:
value:apple
value:Bang
value:cow北
value:D頭
*/
?>
中斷迴圈(break)
在條件判斷文章中,有介紹到switch
執行到break
就會結束
而在while
、do...while
、for
、foreach
中也是一樣
但如果有多重迴圈的話,break
只能結束最靠近他的迴圈
Example - while
<?php
$i = 1;
while($i < 10){
if($i == 7){
break;//執行到這邊結束while迴圈
}
echo $i++;//輸出$i,並且每次+1
}
//output:123456
?>
代表$i
的值是7的時候,就會進入if
的程式區塊執行break
,然後迴圈就結束了
Example - do...while
<?php
$i = 1;
do{
if($i == 7){
break;//執行到這邊結束do...while
}
echo $i++;//輸出$i,並且每次+1
}
while($i < 10);
//output:123456
?>
Example - for
<?php
for($i=1;$i<10;$i++){
if($i == 7){
break;//執行到這邊結束for迴圈
}
echo $i;
}
//output:123456
?>
Example - foreach
<?php
$array = ['A'=>'apple','B'=>'Bang','C'=>'cow北','D'=>'D頭'];
foreach($array as $key => $value){
if($key == 'C'){
break;
}
echo 'key:'.$key.',value:'.$value;
}
/*output:
key:A,value:apple
key:B,value:Bang
*/
?>
$key
是C的時候就進入if的程式區塊執行break,foreach就被結束了,所以只有印出兩行文字
多重迴圈
上面有說到,有多重迴圈的話,break
只能結束最靠近他的迴圈
我們來看個for
迴圈的例子
<?php
for($i = 1;$i < 5;$i++){
for($j = 1;$j < 5;$j++){
echo $i.'X'.$j.'、';
}
}
//output:1X1、1X2、1X3、1X4、2X1、2X2、2X3、2X4、3X1、3X2、3X3、3X4、4X1、4X2、4X3、4X4、
?>
基本上就是列出九九乘法表的1~4部分
那如果加上break
呢
<?php
for($i = 1;$i < 5;$i++){
for($j = 1;$j < 5;$j++){
if($j==3){
break;
}
echo $i.'X'.$j.'、';
}
}
//output:1X1、1X2、2X1、2X2、3X1、3X2、4X1、4X2、
?>
每次$i
X$j
的時候,$j
的值只要是3,就會結束裡面的迴圈,但是外面的迴圈沒有被結束,會繼續執行
因為break
只能結束離自己最近的迴圈
跳過這次,繼續執行下一次迴圈(continue)
有的時候我們不是要停止迴圈,只是這一次不要執行了而已continue
雖然直接翻譯成中文是「繼續」,但是在程式中,意思卻是「跳過這次,直接開始執行下一次迴圈」
但如果有多重迴圈的話,只能讓最靠近continue
的迴圈跳過一次
我們先把剛剛的範例的break
改成continue
Example - while
<?php
$i = 1;
while($i < 10){
if($i == 7){
continue;//執行到這邊跳過這一次迴圈,執行下一次
}
echo $i++;//輸出$i,並且每次+1
}
//output:12345689
?>
代表$i
的值是7的時候,就會進入if
的程式區塊執行continue
,跳過這次的迴圈,直接開始執行下一次
所以印出來是12345689
(沒有7)
剩下的我就不一一列出了,基本上就跟break
的程式碼一樣大家可以自己在電腦上試試看