2012-12-02 38 views
6

看看這個:PHP鍵()或獲得foreach循環的下一個關鍵

<?php 
    $array = array('a' => '…', 'b' => '…', 'c' => '…', 'd' => '…', 'e' => '…', 'f' => '…'); 
    foreach ($array as $key => $val){ 
     echo "current key: $key, next key: ".key(($array))."<br>"; 
    } 
?> 

OUTPUT:

current key: a, next key: b 
current key: b, next key: c 
current key: c, next key: d 
current key: d, next key: e 
current key: e, next key: f 
current key: f, next key: a 

我正在尋找一個函數來獲取foreach循環中關聯數組的下一個鍵。我試了一下,突然發現它工作。 (如你在我的例子中看到的)。

但爲什麼這項工作?是否有意義? ...不對我! 你能解釋一下嗎?

這是因爲key(($array))部分,但爲什麼?我的意思是..這是一個錯誤..我想寫key($array),但我忘了刪除2個包裝托架。 所以這是巧合!

它爲什麼會這樣?我的意思是,這很好,但......?

+3

有趣。如果你打開錯誤報告,你會看到很多錯誤。額外的括號打破了直接變量引用。 '$ a'是一個變量,'($ a)'是得到'$ a'的*值*的表達式。 'key'需要一個通過引用傳遞的變量。不知道究竟是什麼'鍵'做了什麼,爲什麼它的行爲方式,但我想這是錯誤的,未定義的行爲。 – deceze

+1

哇,如果這是打算行爲真棒。曾經有很多次我可以用這樣的東西。 –

+0

但你有什麼建議?我應該這樣保持嗎? –

回答

4

根據PHP手冊keykey()返回當前數組位置的索引元素。

問題不在於key,甚至是雙括號。 Key通過引用接收數組,所以雙括號沒有太大的作用。

行爲來自foreach。當foreach遍歷數組時,不同版本的PHP在設置數組內部current指針時會有不同的表現,這些指針是key(),next(),current()等被調用時正在查看的指針。

PHP中的數組並不像大多數語言中的數組;他們確實是對象(特別是關聯數組)。認爲它們有點像鏈接列表(它們是而不是鏈接列表,但只是出於說明的目的與我一起) - 當你迭代時,你需要知道你現在在哪裏以及你將要在哪裏下一個。

什麼似乎是在這裏發生的是,在任何版本的PHP您正在運行,foreach爲循環開始設置內部current指針next元素在的,在設置$key$value變量後,立即你的代碼。

我肯定會不是取決於此行爲,因爲隨後的PHP更新可能會中斷此代碼。這只是這個特定版本的一個有趣的巧合。如果你想下一個鍵,看看替換你的foreach循環。關於next()的PHP手冊有很好的例子,並且一定要檢查出prev(),each()和其他函數,在「另見」部分。

+0

+100,絕對是個不錯的答案。 –

相關問題