php: як отримати асоціативний ключ масиву з числового індексу?


75

Якщо я маю:

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

як я отримую рядок oneназад від $array[1]?


3
Іншими словами, мова йде про повернення n-го ключа масиву асоціативного масиву.
Сандіпан Нат

Відповіді:


118

Ти ні. Ваш масив не має ключа [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]що не відповідає "одиниці" в будь-який спосіб, коли ви його повернете.


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

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

Що виведе:

one

17

Якщо ви плануєте працювати лише з однією клавішею, ви можете зробити це за допомогою одного рядка, не зберігаючи масив для всіх ключів:

echo array_keys($array)[$i];

спасибі ... це все, що потрібно для тих, хто у циклі for
Ендрю

3
Примітка: Для цього потрібен PHP 5.4+ - джерело 1 | джерело 2 .
Панг

@Pang Приємно знати! Дякую.
StarCrashr

8

Або якщо вам це потрібно в циклі

foreach ($array as $key => $value)
{
    echo $key . ':' . $value . "\n";
}
//Result: 
//one:value
//two:value2

2
Це перегукується з усіма клавішами. Але topicstarter потрібно отримати ключ за числовим індексом. Це не те саме.
Олексій Плютау,

Я це добре знаю. Але з огляду на той факт, що topicstarter є новим для php, це могло бути те, чого він намагався досягти, і просто не знав про синтаксис foreach;)
Decko,


0

Ви можете зробити це таким чином:

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...

Не пробував код, але я впевнений, що він буде працювати.

Удачі!


0

Якщо це перший елемент, тобто $array[0]ви можете спробувати:

echo key($array);

Якщо це другий елемент, тобто $array[1]ви можете спробувати:

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

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


0

Ключ функція допомогла мені і дуже просто:

Функція 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 />

Будь ласка, не просто розміщуйте посилання; це може не спрацювати в майбутньому. Натомість розкрийте, що робить функція та як нею користуватися.
Ендрю Арнольд,

-1

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

    function get_key($array, $index){
      $idx=0;
      while($idx!=$index  && next($array)) $idx++;
      if($idx==$index) return key($array);
      else return '';
    }
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.