php: как получить ассоциативный ключ массива из числового индекса? - PullRequest
66 голосов
/ 04 ноября 2010

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

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

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

Ответы [ 8 ]

104 голосов
/ 04 ноября 2010

Ты не. В вашем массиве нет ключа [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] не соответствует «одному», каким бы образом вы его не поворачивали.

51 голосов
/ 04 ноября 2010
$array = array( 'one' =>'value', 'two' => 'value2' );

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

Который выдаст:

one
16 голосов
/ 07 февраля 2015

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

echo array_keys($array)[$i];
6 голосов
/ 04 ноября 2010

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

foreach ($array as $key => $value)
{
    echo $key . ':' . $value . "\n";
}
//Result: 
//one:value
//two:value2
2 голосов
/ 04 ноября 2010
$array = array( 'one' =>'value', 'two' => 'value2' );
$keys  = array_keys($array);
echo $keys[0]; // one
echo $keys[1]; // two
0 голосов
/ 01 февраля 2016

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

    function get_key($array, $index){
      $idx=0;
      while($idx!=$index  && next($array)) $idx++;
      if($idx==$index) return key($array);
      else return '';
    }
0 голосов
/ 29 июля 2014

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

0 голосов
/ 04 ноября 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...

Не пробовал код, но я уверен, что он будет работать.

Удачи!

...