如何循环关联数组并获取密钥?

Rob*_*cks 163 php loops associative-array

我的关联数组:

$arr = array(
   1 => "Value1",
   2 => "Value2",
   10 => "Value10"
);
Run Code Online (Sandbox Code Playgroud)

使用以下代码$v填充了$arr

 foreach($arr as $v){
    echo($v);    // Value1, Value2, Value10
 }
Run Code Online (Sandbox Code Playgroud)

我如何获得$arr钥匙?

 foreach(.....){
    echo($k);    // 1, 2, 10
 }
Run Code Online (Sandbox Code Playgroud)

cod*_*ict 317

你可以做:

foreach ($arr as $key => $value) {
 echo $key;
}
Run Code Online (Sandbox Code Playgroud)

PHP文档中所述.

  • @codaddict,`foreach`的序列是否保证与声明中的序列相同? (3认同)

Tre*_*hns 65

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

$keys = array_keys($arr);
foreach($keys as $key) {
    echo($key);
}
Run Code Online (Sandbox Code Playgroud)

或者,您可以这样做:

foreach($arr as $key => $value) {
    echo($key);
}
Run Code Online (Sandbox Code Playgroud)

  • 哪一个更快? (5认同)
  • @TrevorJohns,订单有保证吗? (3认同)
  • 在第一个解决方案中,我的 IDE (Netbeans) 没有给出 $value 变量未使用的警告,所以这里是 + 1 (2认同)

Muh*_*tih 33

没有人回答常规for循环?有时候,我觉得它更具可读性和更喜欢forforeach
所以在这里,它是:

$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
*/
Run Code Online (Sandbox Code Playgroud)

  • 在计算机方面没有"无法解释的"原因. (6认同)
  • 这在某些情况下非常有用,因为foreach因无法解释的原因而出现故障.很高兴总能至少有两种方法来做事. (2认同)
  • foreach 中的错误如下所述: https://www.php.net/manual/en/control-structs.foreach.php 如果您使用 PHP 7,则嵌套 foreach 和 foreach 引用将按预期工作。如果您使用 PHP 5,则应避免通过引用值使用 foreach,因为所有 foreach 都使用内部数组指针 ( current($Array) ),嵌套 foreach 或使用 PHP 数组函数可能会造成奇怪的结果。 (2认同)

Htb*_*baa 10

foreach($array as $k => $v)
Run Code Online (Sandbox Code Playgroud)

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

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


dme*_*han 7

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

foreach ($array as $key => $value)
{
  echo "<p>$key = $value</p>";
}
Run Code Online (Sandbox Code Playgroud)

  • 唯一的答案清楚而简明地描述了如何在循环中使用键和值! (2认同)

Jef*_*eck 5

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

foreach ($arr as $key => $value)
{
  echo($key);
}
Run Code Online (Sandbox Code Playgroud)