在PHP中for和foreach的區別

2021-10-07 14:31:22 字數 3327 閱讀 4236

在php中for和foreach的區別

首先,我們先準備兩個用於遍歷的陣列:

$arr1=array(1=>『a』, 3=>22, 5=>『b』, 4=>『c』, 8=>『d』);

$arr2=array(『a』=>『aaa』, 『b』=>『bbb』, 『c』=>『ccc』, 『d』=>『ddd』, 『e』=>『eee』);

一:for迴圈結構

迴圈1:

for(i=0

,i=0,

i=0,

num=count(arr

1)

;arr1);

arr1);ium

;num;

num;

i++){

echo $arr1[$i].' ';
輸出結果:a 22 c

迴圈2:

for(i=0

,i=0,

i=0,

num=count(arr

2)

;arr2);

arr2);ium

;num;

num;

i++){

echo $arr2[$i].' ';
此段語句沒有輸出

分析:迴圈1只列印出了陣列arr

1的前兩

個單元,

而迴圈2

中的

arr1的前兩個單元,而迴圈2中的

arr1的前

兩個單元

,而迴圈

2中的arr2則什麼都沒列印出來。

原因在於for迴圈的時候是按照數字遞增的,因此for只能訪問鍵為數字的陣列,例如迴圈1按照i=0

到i=0到

i=0到

i=4去遞增訪問arr

1陣列中

鍵為0到

4的單元

,但該數

組中的鍵

依次為:

1,3,

5,4,

8。而鍵

值超過4

的陣列單

元(5=

>』b

』,8=

>』d

』)不會

被訪問到

,因為c

ount

(arr1陣列中鍵為0到4的單元,但該陣列中的鍵依次為:1,3,5,4,8。而鍵值超過4的陣列單元(5=>』b』,8=>』d』)不會被訪問到,因為count(

arr1陣列

中鍵為0

到4的單

元,但該

陣列中的

鍵依次為

:1,3

,5,4

,8。而

鍵值超過

4的陣列

單元(5

=>』b

』,8=

>』d

』)不會

被訪問到

,因為c

ount

(arr1)=5,故i

<5;

因此最後

輸出結果

只有:a

22c;對

於i<5; 因此最後輸出結果只有:a 22 c ;對於

i<5;

因此最後

輸出結果

只有:a

22c;

對於arr2中所有的鍵都是字元,並非數字,所以迴圈2中沒有輸出。

二:foreach迴圈結構

迴圈3:

foreach($arr1 as key

=>

key=>

key=

>

value){

echo $key.'=>'.$value.' ';
輸出結果:1=>a 3=>22 5=>b 4=>c 8=>d

迴圈4:

foreach($arr2 as key

=>

key=>

key=

>

value){

echo $key.'=>'.$value.' ';
輸出結果:a=>aaa b=>bbb c=>ccc d=>ddd e=>eee

分析:foreach迴圈結構是按照陣列內部的指標去迴圈的,當 foreach 開始執行時,陣列內部的指標會自動指向第乙個單元。因此下一次迴圈中將會得到下乙個單元,不需要按照陣列的鍵來遍歷整個陣列。這也是foreach與for的不同之處。當然,foreach只能用於陣列和物件,並且由於 foreach 依賴內部陣列指標,在迴圈中修改其值將可能導致意外的行為。

注:for每次迴圈都操作對應索引下的值,對於每個值的改變也都會反映到被遍歷的物件中。而foreach每次操作乙個單元,都是將其索引和值分別取到變數中,或者只取出值到乙個變數中,然後單獨操作放有索引和值的變數,不會影響到被遍歷的物件本身。如果要在遍歷過程中修改物件中的值,需要在宣告是在變數前加&符號。例如:foreach(katex parse error: expected 'eof', got '&' at position 10: array as &̲value)。

結論:如果乙個陣列是使用連續的數字最為陣列單元的鍵,那麼可以使用for迴圈結構。如果不確定陣列的鍵或者陣列的鍵有包含字元的,應當使用foreach迴圈結構。

附:php陣列的遍歷迴圈,可以採用for和foreach,

$a = array (『zero』, 『one』, 『two』, 『three』);

//for迴圈遍歷輸出陣列

for($i = 0; i

unt(

i < count(

iunt(

a); $i++)

echo a[a[

a[i];//foreach遍歷迴圈輸出陣列a的值與對應的鍵

foreach ($a as $key => val

ue)e

cho"

value) echo "

value)

echo

"key: $value";

for迴圈輸出陣列需要統計陣列內的數量,foreach不需要考慮,for迴圈可用範圍更多些,foreach僅適合於陣列的輸出使用。

很多時候,我們需要輸出的資料是乙個二維的陣列變數,excel**的資料形式就是乙個二維陣列,我們可以用foreach的巢狀迴圈來遍歷陣列,三維及以上的陣列就建議用遞迴的方式來輸出了。

$r = array (

array(『a1』,『a2』),

array(『b1』,『b2』),

);foreach ($r as v)f

orea

ch

(v) foreach(

v)fore

ach(

v as $sv)

echo $sv;

在PHP中,include和require的區別

require和include的相同之處 都可以包括並執行指定檔案。不同之處 include 使用時,每次都要進行讀取和評估,require使用時,檔案處理一次。實際上,檔案內容替換require 語句 這就意味著如果可能執行多次的 則使用require 效率比較高。另外一方面,如果每次執行 時是讀...

json在php和ajax中應用

馬永佔,myz,mayongzhan json是啥.應該是一種儲存的格式吧.最強的是這種格式可以被js直接當成物件讀 php中有json encode arr 還有json decode str,assoc 其中assoc為true則返回陣列而不是物件 很簡單的用法 手冊中的例子 arr array...

在php中驗證xml 在PHP中驗證XML

在php中驗證xml 存檔日期 2019年4月18日 首次發布 2009年11月10日 php開發人員通常在其 中需要可擴充套件標記語言 xml 解析器的服務。因此,他們經常發現有必要驗證xml輸入。幸運的是,您可以在php中輕鬆完成此操作。本文向您展示如何在php中驗證xml文件以及確定驗證失敗的...