Как пройти по ассоциативному массиву и получить ключ?

Мой ассоциативный массив:

$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
 }

person Robin Rodricks    schedule 23.12.2009    source источник
comment
Кстати, в массиве отсутствуют запятые.   -  person raphink    schedule 23.12.2009
comment
Последняя запятая не обязательна, не так ли?   -  person Stijn de Witt    schedule 08.03.2014


Ответы (10)


Ты можешь сделать:

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

Как описано в документации PHP.

person codaddict    schedule 23.12.2009
comment
@codaddict, последовательность foreach гарантированно будет такой же, как в объявлении? - person Pacerier; 27.03.2015

Если вы используете array_keys(), PHP предоставит вам массив, заполненный только ключами:

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

В качестве альтернативы вы можете сделать это:

foreach($arr as $key => $value) {
    echo($key);
}
person Trevor Johns    schedule 23.12.2009
comment
В первом решении моя IDE (Netbeans) не выдает предупреждения о том, что переменная $ value не используется, поэтому здесь + 1 - person Zaky German; 26.12.2012
comment
@TrevorJohns, заказ гарантирован? - person Pacerier; 03.04.2015

Никто не ответил обычным 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
*/
person MuhsinFatih    schedule 19.10.2016
comment
Это полезно в некоторых случаях, когда foreach дает сбой по необъяснимым причинам. Хорошо всегда иметь как минимум два способа сделать что-то. - person lilHar; 19.04.2017
comment
Когда дело касается компьютеров, нет необъяснимых причин. - person JDrake; 21.11.2017
comment
Также полезно, когда вы хотите объединить два последующих элемента массива вместе. i + = 2, а затем используя $ array [$ keys [$ i]] ._. $ array [$ keys [$ i + 1]] Просто на случай, если у кого-то еще есть такая же проблема - person Keeghan McGarry; 12.01.2018
comment
Ошибки в foreach описаны здесь: php.net/manual/en/ control-structure.foreach.php Если вы используете PHP 7, вложенные foreach и ссылки foreach работают должным образом. Если вы используете PHP 5, вам следует избегать использования foreach по ссылочным значениям, и поскольку все foreach используют внутренний указатель массива (current ($ Array)), вложение foreach или использование функций массива PHP может делать странные вещи. - person Chaoix; 12.07.2019

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

Где $ k - ключ, а $ v - значение

Или, если вам просто нужны ключи, используйте array_keys ()

person Htbaa    schedule 23.12.2009

Я использую следующий цикл, чтобы получить ключ и значение из ассоциативного массива

foreach ($array as $key => $value)
{
  echo "<p>$key = $value</p>";
}
person dmeehan    schedule 26.08.2015
comment
Единственный ответ, который четко и кратко описывает, как использовать в цикле как ключ, так и значение! - person SharpC; 21.09.2017

Следующее позволит вам получить и ключ, и значение одновременно.

foreach ($arr as $key => $value)
{
  echo($key);
}
person Jeff Beck    schedule 23.12.2009

Хотя этот метод, возможно, менее понятен, он быстрее примерно в 3,5 раза (по крайней мере, на коробке, которую я использовал для тестирования)

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

Я бы предположил, что это связано с тем, что foreach копирует весь массив перед повторением по нему.

person nettux    schedule 08.07.2014

Используйте $key => $val, чтобы получить ключи:

<?php

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

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

?>
person raphink    schedule 23.12.2009

О, я нашел его в руководстве по PHP.

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

Ключ текущего элемента будет назначен переменной $ key в каждом цикле.

person Robin Rodricks    schedule 23.12.2009

Если вы используете вложенную функцию 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");
}

?>
person Hewarathna Ashen Iranga    schedule 27.04.2019