如何在foreach中获取Array索引

时间:2011-11-01 13:05:49

标签: php

我在php中有一个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++;
    }

2 个答案:

答案 0 :(得分:19)

使用此语法foreach访问密钥($index)和值($person

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

这解释为in the PHP foreach documentation.

答案 1 :(得分:2)

为什么在 associative 数组中需要 numeric 索引?关联数组将任意值映射到任意值,例如在您的示例中,将字符串映射到字符串和数字:

$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将具有数字值。如果迭代关联数组,它将具有您指定的键值。

说真的,为什么我甚至都在描述这一切?!直接来自手册的常识!

现在,如果你有一个带有一些任意键的关联数组,并且你必须知道值的编号位置并且你不关心键,你可以迭代结果{{你阵列上的1}}:

array_values

但是如果你关心密钥,你必须使用额外的计数器,就像你自己展示的那样:

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

或者$counter = 0; foreach ($assoc as $key => $value) { // do stuff with $key and $value ++$counter; } 的一些搞砸功能风格的东西,并不重要。