如何遍历关联数组并获取键名?

211

我的关联数组:

$arr = array(
   1 => "Value1",
   2 => "Value2",
   10 => "Value10"
);
使用以下代码,$v将填充$arr的值。
 foreach ($arr as $v){
    echo $v;    // Value1, Value2, Value10
 }

我该如何获取$arr的键而不是值?

 foreach (.....){
    echo $k;    // 1, 2, 10
 }
12个回答

397

您可以这样做:

foreach ($arr as $key => $value) {
 echo $key;
}

如PHP文档所述


82

如果你使用array_keys(),PHP将返回一个仅包含键的数组:

$keys = array_keys($arr);
foreach ($keys as $key) {
    echo $key;
}

或者,你也可以这样做:

foreach ($arr as $key => $value) {
    echo $key;
}

45

没有人使用常规的for循环进行回答吗?有时我发现它更易读,更喜欢使用for而不是foreach
这里就是代码:

$array = array('key1' => 'value1', 'key2' => 'value2'); 

$keys = array_keys($array);

for($i=0; $i < count($keys); ++$i) {
    echo $keys[$i] . ' ' . $array[$keys[$i]] . "\n";
}

/*
  prints:
  key1 value1
  key2 value2
*/

4
在某些情况下,由于无法解释的原因,foreach会出现故障,这时候这个方法就很有用了。拥有至少两种方法做事情总是好的。 - lilHar
15
在计算机领域中没有“无法解释”的原因。 - jdrake
1
还有一种情况是当你想要将两个相邻的数组项合并在一起时,这也非常有用。可以使用i+=2,然后使用$array[$keys[$i]]."_".$array[$keys[$i+1]]。以防其他人遇到同样的问题。 - Keeghan McGarry
2
foreach 中的错误在此处描述: https://www.php.net/manual/en/control-structures.foreach.php 如果您使用的是 PHP 7,则嵌套 foreach 和 foreach 引用将按预期工作。 如果您使用的是 PHP 5,则应避免使用引用值的 foreach,并且由于所有 foreach 使用内部数组指针(current($Array)),因此嵌套 foreach 或使用 PHP 数组函数可能会出现奇怪的问题。 - Chaoix
@jdrake 如果随机 foreach 不起作用,你只需要将它替换为 for 循环,那会非常有趣。这是 INTERCAL 应该实现的功能之一。 - Adam

11
foreach($array as $k => $v)

其中 $k 是键,$v 是值。

如果您只需要键,请使用 array_keys()。


8
我使用下面的循环从关联数组中获取键和值。
foreach ($array as $key => $value)
{
  echo "<p>$key = $value</p>";
}

2
唯一一个清晰简洁地描述如何在循环中同时使用键和值的答案! - SharpC

5
以下内容将帮助您同时获取键和值。
foreach ($arr as $key => $value)
{
  echo($key);
}

3

虽然可能不够清晰,但这种方法的速度大约快了大约3.5倍(至少在我测试时使用的计算机上是如此)。

$foo = array(
    1 => "Value1",
    2 => "Value2",
    10 => "Value10"
);
while($bar = each($foo)){
    echo $bar[0] . " => " . $bar[1];
}

我想这是因为 foreach 在迭代数组之前会复制整个数组。

请注意,'each'函数在PHP 8.0版本中已被删除。 - danplaton4

2
 foreach($arr as $key=>$value){
    echo($key);    // key
 }

1
喜欢这个回答是在codeaddict回答之后4秒钟发布的,而13年后它的得分是0分,而381分。给它一个怜悯的赞吧。 - miken32

1

使用$key => $val来获取键:

<?php

$arr = array(
    1 => "Value1",
    2 => "Value2",
    10 => "Value10",
);

foreach ($arr as $key => $val) {
   print "$key\n";
}

?>

1

哦,我在PHP手册中找到了它。

foreach ($array as $key => $value){
    statement
}

每次循环时,当前元素的键名将被分配给变量$key

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接