php: как получить ключ ассоциативного массива из числового индекса?

Если у меня есть:

$array = array( 'one' =>'value', 'two' => 'value2' );

как мне получить строку one обратно из $array[1] ?


person Mazatec    schedule 04.11.2010    source источник
comment
Другими словами, речь идет о возврате n-го ключа массива ассоциативного массива.   -  person Sandeepan Nath    schedule 12.02.2013


Ответы (9)


Вы не знаете. В вашем массиве нет ключа [1]. Ты мог бы:

  • Создайте новый массив, содержащий ключи:

    $newArray = array_keys($array);
    echo $newArray[0];
    

    Но значение "один" находится в $newArray[0], а не [1].
    Ярлык будет таким:

    echo current(array_keys($array));
    
  • Получить первый ключ массива:

     reset($array);
     echo key($array);
    
  • Получить ключ, соответствующий значению «значение»:

    echo array_search('value', $array);
    

Все зависит от того, что именно вы хотите сделать. Дело в том, что [1] не соответствует единице, как бы вы ее ни поворачивали.

person deceze♦    schedule 04.11.2010

$array = array( 'one' =>'value', 'two' => 'value2' );

$allKeys = array_keys($array);
echo $allKeys[0];

Что выведет:

one
person kennytm    schedule 04.11.2010

Если вы планируете работать только с одним ключом, вы можете сделать это с помощью одной строки без необходимости хранить массив для всех ключей:

echo array_keys($array)[$i];
person StarCrashr    schedule 06.02.2015
comment
спасибо... это все, что нужно любому в цикле for - person Andrew; 05.05.2016
comment
Примечание. Для этого требуется PHP 5.4+ — источник 1 | источник 2. - person Pang; 05.07.2016
comment
@Pang Приятно знать! Спасибо. - person StarCrashr; 20.09.2018

Или, если вам это нужно в цикле

foreach ($array as $key => $value)
{
    echo $key . ':' . $value . "\n";
}
//Result: 
//one:value
//two:value2
person Decko    schedule 04.11.2010
comment
Он повторяет все ключи. Но топикстартеру нужно получить ключ по числовому индексу. Это не то же самое. - person Alex Pliutau; 04.11.2010
comment
Я хорошо знаю об этом. Но, учитывая тот факт, что topstarter новичок в php, возможно, это было то, чего он пытался достичь, и просто не знал о синтаксисе foreach ;) - person Decko; 12.11.2010

Вы можете сделать это следующим образом:

function asoccArrayValueWithNumKey(&$arr, $key) {
   if (!(count($arr) > $key)) return false;
   reset($array);
   $aux   = -1;
   $found = false;
   while (($auxKey = key($array)) && !$found) {
      $aux++;
      $found = ($aux == $key);
   }
   if ($found) return $array[$auxKey];
   else return false;
}

$val = asoccArrayValueWithNumKey($array, 0);
$val = asoccArrayValueWithNumKey($array, 1);
etc...

Код не пробовал, но уверен, что сработает.

Удачи!

person Nicolas    schedule 04.11.2010

Если это первый элемент, то есть $array[0], вы можете попробовать:

echo key($array);

Если это второй элемент, то есть $array[1], вы можете попробовать:

next($array);
echo key($array);

Я думаю, что этот метод следует использовать, когда требуемый элемент является первым, вторым или максимум третьим элементом массива. В остальных случаях следует использовать циклы, иначе ухудшится читаемость кода.

person VivekP    schedule 06.11.2019

Мне помогла функция key, и она очень проста:

Функция key() просто возвращает ключ элемента массива, на который в данный момент указывает внутренний указатель. Он никак не двигает указатель. Если внутренний указатель указывает за конец списка элементов или массив пуст, key() возвращает NULL.

Пример:

<?php
    $array = array(
        'fruit1' => 'apple',
        'fruit2' => 'orange',
        'fruit3' => 'grape',
        'fruit4' => 'apple',
        'fruit5' => 'apple');

    // this cycle echoes all associative array
    // key where value equals "apple"
    while ($fruit_name = current($array)) {
        if ($fruit_name == 'apple') {
            echo key($array).'<br />';
        }
        next($array);
    }
?>

Приведенный выше пример выведет:

fruit1<br />
fruit4<br />
fruit5<br />
person Ram Dane    schedule 29.07.2014
comment
Пожалуйста, не просто публикуйте ссылку; это может не сработать в будущем. Вместо этого подробно опишите, что делает функция и как ее использовать. - person Andrew Arnold; 29.07.2014

Еще один пример:

Получить наиболее частое вхождение (я) в массиве:

PHP ›= 7.3:

$ php --version
PHP 7.4.3 (cli) (built: Oct  6 2020 15:47:56) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.3, Copyright (c), by Zend Technologies

$ php -a
Interactive mode enabled

php > $a = array_count_values(array('abc','abc','def','def','def'));
php > var_dump($a);
array(2) {
  ["abc"]=>
  int(2)
  ["def"]=>
  int(3)
}
php > arsort($a);
php > var_dump($a);
array(2) {
  ["def"]=>
  int(3)
  ["abc"]=>
  int(2)
}
php > var_dump(array_key_first($a));
string(3) "def"
php > var_dump(array_keys($a)[1]);
string(3) "abc"

Если у вас есть ключ, вы можете легко запросить значение (= частота).

person qräbnö    schedule 21.04.2021

Расширяя ответ Рэма Дейна, функция key является альтернативным способом получения ключа текущего индекса массива. Вы можете создать следующую функцию,

    function get_key($array, $index){
      $idx=0;
      while($idx!=$index  && next($array)) $idx++;
      if($idx==$index) return key($array);
      else return '';
    }
person Aurovrata    schedule 01.02.2016