2011-05-25 60 views
12

一個PHP中的foreach循環的例子是PHP foreach循環例如混亂

foreach ($row as $key => $value) { 
    // somecode 
} 
我無法理解什麼 =>

。任何人都可以通過它如何「看到」或通過PHP進行評估來運行我? 什麼是操作順序,什麼值分配給$key

是什麼使得它不同於:

foreach ($row as $value) { 
    // somecode 
} 

我在邏輯上我認爲的$value值將被分配到$key,那麼它會被指定爲的$row一排,但是這是顯然是不正確......

+0

[參考 - 這個符號在PHP中意味着什麼?](http://stackoverflow.com/questions/3737139/reference-what-does-this-symbol-mean-in-php) – 2011-05-25 20:25:43

回答

2

兩個例子是相同的,但第一個添加了您正在查看的密鑰的定義,並將其命名爲$ key。

比較到array()定義,像array('key' => 'value')

如果使用第一種方法,你必須包含$關鍵「鑰匙」,並在第二個例子中,你不知道。

9

PHP數組存儲的密鑰對和值:

$arr = array(
    'key1' => 'value1', 
    'key2' => 'value2' 
); 

標準foreach語法只是取值:

foreach ($arr as $value) { 
    // value1, value2 
} 

替代語法可以讓你得到鍵以及:

foreach ($arr as $key => $value) { 
    // $key is "key1", then "key2" 
    // $value is "value1" then "value2" 
} 

查看manual entry for foreach

0
foreach ($row as $key => $value) { ..somecode..} 

以上是在一個關聯數組使用,如:

array("a" => 1, "b" => 2, "c" => 3); 

在上述情況下,$關鍵變量分配第一值[A上的第一次迭代,B上的第二個,最後一個循環中的c](稱爲鍵),並且$ value變量被賦予第二個值[第一次迭代時爲1,第二次,第二次,最後3次](稱爲值。)

如果他們的鍵分配被省略,那麼$值仍然會被分配第二個值。

0

操作碼來foreach密鑰和值:

BCDF9C 0005: FE_RESET    (CV 0 ($array), u) -> VAR 2 
BCE014 0005: FE_FETCH    (VAR 2, u) -> VAR 3 
BCE08C 0005: OP_DATA    (u VAR 0 &(0+2208F38), u VAR 0 &(0+2208F38)) -> TMP_VAR 5 &(C8+2208F39) 
BCE104 0005: ASSIGN    (CV 2 ($value), VAR 3) -> VAR 4 
BCE17C 0005: ASSIGN    (CV 1 ($key), TMP_VAR 5) -> VAR 6 
BCE1F4 0005: JMP     (u &(BCDFA0+4)) 
BCE26C 0005: SWITCH_FREE   (VAR 2) 

操作碼來foreach只值:

BCE2E4 0007: FE_RESET    (CV 0 ($array), u) -> VAR 7 
BCE35C 0007: FE_FETCH    (VAR 7, u) -> VAR 8 
BCE3D4 0007: OP_DATA    (u VAR 0 &(0+2208F38), u VAR 0 &(0+2208F38)) -> u VAR 0 &(0+2208F38) 
BCE44C 0007: ASSIGN    (CV 2 ($value), VAR 8) -> VAR 9 
BCE4C4 0007: JMP     (u &(BCE2E8+B)) 
BCE53C 0007: SWITCH_FREE   (VAR 7) 

對不起,我奇怪的操作碼錶示。

基本上,沒有鍵的版本每次迭代都會分配兩個較少的變量。它不分配鍵和臨時變量,但它只是直接分配var。

20

我明白這是一個有點棘手,我有問題的理解,當我開始使用它。你使用它越多,它就越有意義。

你的陣列應該是這樣的:

// "key" "value" 
// |  | 
// V  V 
$row['1'] = 'item1'; 
$row['2'] = 'item2'; 
$row['3'] = 'item3'; 
$row['4'] = 'item4'; 

鍵可以是任何東西,他們並不需要爲數字。這樣你就可以迭代數組中的所有項目而無需知道密鑰!

所以,你的第一個例子可以說明如下:

//   +--- The ARRAY where all of your data is 
//   | 
//   |  +----- The KEY to access that element of the array 
//   |  | 
//   |  |  +----- The VALUE of that element 
//   |  |  | 
//   V  V  V 
foreach ($row as $key => $value){ 
    if($row[$key] == $value){ // this statement is always true 
     echo "true AGAIN!"; // and thus will always print this line 
    } 
} 

至於我的理解而來的=>是不是真的各種各樣的操作數,它只是用來完成foreach環的結構。

+0

我愛圖紙,但你的例子是錯誤的。 '$ key'實際上會包含值,而不是鍵。 – notJim 2011-05-25 21:01:16

+0

謝謝@notJim,你是對的,我的錯誤..我會修復我的答案。謝謝你指出。我把代碼打在頭頂上,沒有先檢查。 – CenterOrbit 2011-05-31 22:50:33

+0

+1 – marcio 2013-03-31 09:03:09

0

PHP Documentation

對於數組,將值分配給一個 命名密鑰是使用 「=>」 操作員執行。此 運算符的優先級與其他 賦值運算符相同。

這個問題也讓我很好奇在PHP中使用=>運算符的名字。

正如你所看到的文件沒有明確給它一個名字。這導致我在IRC上搜索PHP頻道。普遍的共識是它被稱爲火箭運營商。