如何遍历关联数组并获取密钥? [复制]

Posted

技术标签:

【中文标题】如何遍历关联数组并获取密钥? [复制]【英文标题】:How to loop through an associative array and get the key? [duplicate] 【发布时间】:2010-12-29 10:20:27 【问题描述】:

我的关联数组:

$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
 

【问题讨论】:

顺便说一句,您在数组中缺少逗号。 最后一个逗号不是可选的吗? 【参考方案1】:

如果您使用嵌套的foreach() 函数,外部数组的键会一次又一次地打印,直到内部数组值结束。

<?php 

$myArray = ['key_1' => ['value_1', 'value12'],
            'key_2' => ['value_2', 'value22'], 
            'key_3' => ['value_3', 'value32']
           ];

$keysOfMyArray = array_key($myArray);

for ($x = 0; $x < count($myArray); $x++)
       print "\t".$keysOfMyArray[$x]."\t\t".implode("\t\t",$myArray[$keysOfMyArray[$x]]."\n");


?>

【讨论】:

【参考方案2】:

你可以这样做:

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

如PHP docs 中所述。

【讨论】:

@codaddict,foreach的序列是否保证与声明中的序列一致?【参考方案3】:

哦,我在PHP manual找到了。

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

当前元素的键将在每个循环中分配给变量$key

【讨论】:

【参考方案4】:
<?php
$names = array("firstname"=>"maurice",
               "lastname"=>"muteti", 
               "contact"=>"7844433339");

foreach ($names as $name => $value) 
    echo $name." ".$value."</br>";


print_r($names);
?>

【讨论】:

【参考方案5】:

没有人回答常规的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
*/

【讨论】:

当 foreach 由于无法解释的原因而出现故障时,这在某些情况下很有用。总是有至少两种做事的方式很好。 在计算机方面没有“无法解释”的原因。 当您想要将两个后续数组项组合在一起时也很有用。 i+=2 然后使用 $array[$keys[$i]]."_".$array[$keys[$i+1]] 以防其他人遇到同样的问题 这里描述了 foreach 中的错误:php.net/manual/en/control-structures.foreach.php 如果您使用的是 PHP 7,嵌套的 foreach 和 foreach 引用将按预期工作。如果您使用的是 PHP 5,则应避免通过引用值使用 foreach,因为所有 foreach 都使用内部数组指针 ( current($Array) ) 嵌套 foreach 或使用 PHP 数组函数会做一些奇怪的事情。【参考方案6】:

我使用以下循环从关联数组中获取键和值

foreach ($array as $key => $value)

  echo "<p>$key = $value</p>";

【讨论】:

唯一能清楚简洁地描述如何在循环中同时使用键和值的答案!【参考方案7】:

虽然可以说不太清楚,但这种方法的速度大约快了大约 3.5 倍(至少在我用来测试的盒子上)

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

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

【讨论】:

【参考方案8】:

如果你使用array_keys(),PHP 会给你一个只包含键的数组:

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

或者,您可以这样做:

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

【讨论】:

在第一个解决方案中,我的 IDE (Netbeans) 没有给出 $value 变量未使用的警告,所以这里是 + 1 @TrevorJohns,订单有保证吗?【参考方案9】:

使用$key =&gt; $val 获取密钥:

<?php

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

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


?>

【讨论】:

【参考方案10】:
 foreach($arr as $key=>$value)
    echo($key);    // key
 

【讨论】:

【参考方案11】:
foreach($array as $k => $v)

$k 是键,$v 是值

或者,如果您只需要密钥,请使用 array_keys()

【讨论】:

【参考方案12】:

以下将允许您同时获取键和值。

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

  echo($key);

【讨论】:

以上是关于如何遍历关联数组并获取密钥? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

php:如何从数字索引中获取关联数组键?

如何在 Bash 中迭代关联数组

如何按给定键的值对关联数组进行排序并在php中维护键? [复制]

如何使用此数据创建关联数组并获取其结果?

PHP 数组遍历方法大全(foreach,list,each)

php判断数组是关联数组还是数值数组