2011-11-01 70 views
5

我在PHP中有一個foreach循環來迭代關聯數組。在循環內,而不是增加一個變量,我想獲取當前元素的數字索引。可能嗎。如何在foreach中獲取數組索引

$arr = array('name'=>'My name','creditcard'=>'234343435355','ssn'=>1450); 
foreach($arr as $person){ 
    // want index here 
} 

我通常這樣做是爲了獲得指數:

$arr = array('name'=>'My name','creditcard'=>'234343435355','ssn'=>1450); 
    $counter =0; 
    foreach($arr as $person){ 
     // do a stuff 
$counter++; 
    } 
+0

關聯數組有什麼用途? – Sonny

回答

18

使用此語法foreach訪問密鑰(如$index)和值($person

foreach ($arr as $index => $person) { 
    echo "$index = $person"; 
} 

這解釋in the PHP foreach documentation.

2

爲什麼你需要一個數字索引裏面聯想數組?關聯數組中的例子的字符串的任意值映射到任意值,等等,以字符串和數字:

$assoc = [ 
    'name'=>'My name', 
    'creditcard'=>'234343435355', 
    'ssn'=>1450 
]; 

數字陣列的連續編號爲任意值映射。在您的例子,如果我們刪除所有字符串鍵,編號將是這樣的:

$numb = [ 
    0=>'My name', 
    1=>'234343435355', 
    2=>1450 
]; 

在PHP中你不必在這種情況下,指定的鍵,它會產生他們自己。 現在,爲了得到foreach聲明鍵,可以使用下面的表格,像@MichaelBerkowski已經顯示出你:

foreach ($arr as $index => $value) 

如果您遍歷數組編號,$index將有數值。如果你迭代關聯數組,它將擁有你指定的鍵值。

說真的,爲什麼我甚至描述了這一切?!這是手冊中的常識!現在

,如果你有一個關聯陣列與一些任意鍵,你必須知道的值的編號位置,你不關心鍵,您可以遍歷的array_values結果陣列上:

foreach (array_values($assoc) as $value) // etc 

但是,如果你做一下鍵照顧,你必須使用額外的櫃檯,就像你自己所示:

$counter = 0; 
foreach ($assoc as $key => $value) 
{ 
    // do stuff with $key and $value 
    ++$counter; 
} 

或者一些screwe d功能風格的東西與array_reduce,沒關係。

+0

哈哈謝謝@hijarian。正如5年前所問。現在我已經寫了關於PHP –

+0

@MarthaJames bwahaha的書,屍體! :) – hijarian