我在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++;
}
答案 0 :(得分:19)
使用此语法foreach
访问密钥($index
)和值($person
)
foreach ($arr as $index => $person) {
echo "$index = $person";
}
答案 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;
}
的一些搞砸功能风格的东西,并不重要。