2011-11-01 69 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