Получить первый ключ в (возможно) ассоциативном массиве? - PullRequest
710 голосов
/ 22 июня 2009

Как лучше всего определить первый ключ в возможно ассоциативном массиве? Сначала я подумал, что нужно просто просмотреть массив, а затем сразу же разбить его, как это:

foreach ($an_array as $key => $val) break;

Таким образом, наличие ключа $ содержит первый ключ, но это кажется неэффективным. У кого-нибудь есть лучшее решение?

Ответы [ 19 ]

9 голосов
/ 28 декабря 2012

Это также может быть решением.

$yourArray = array('first_key'=> 'First', 2, 3, 4, 5);
$first_key = current(array_flip($yourArray));
echo $first_key;

Я проверил это, и оно работает.

Рабочий код:

4 голосов
/ 13 сентября 2017

Чтобы улучшить решение Webmut , я добавил следующее решение:

$firstKey = array_keys(array_slice($array, 0, 1, TRUE))[0];

Вывод для меня на PHP 7.1:

foreach to get first key and value: 0.048566102981567 seconds 
reset+key to get first key and value: 0.11727809906006 seconds 
reset+key to get first key: 0.11707186698914 seconds 
array_keys to get first key: 0.53917098045349 seconds 
array_slice to get first key: 0.2494580745697 seconds 

Если я сделаю это для массива размером 10000, то результат будет

foreach to get first key and value: 0.048488140106201 seconds 
reset+key to get first key and value: 0.12659382820129 seconds 
reset+key to get first key: 0.12248802185059 seconds 
array_slice to get first key: 0.25442600250244 seconds 

Время выполнения метода array_keys составляет 30 секунд (при использовании только 1000 элементов время для остальных операций было примерно таким же, но у метода array_keys было около 7,5 секунд).

3 голосов
/ 17 февраля 2016

Лучший способ, который работал для меня, был

array_shift(array_keys($array))

array_keys получает массив ключей из исходного массива, а затем array_shift вырезает из него значение первого элемента. Для этого вам понадобится PHP 5.4+.

3 голосов
/ 25 января 2014
 $arr = array('key1'=>'value1','key2'=>'value2','key3'=>'key3');
 list($first_key) = each($arr);
 print $first_key;
 // key1
2 голосов
/ 04 декабря 2018

php73:

$array = ['a' => '..', 'b' => '..'];

array_key_first($array); // 'a'
array_key_last($array); // 'b';

http://php.net/manual/en/function.array-key-first.php

2 голосов
/ 31 марта 2017

Это самый простой способ, который я когда-либо нашел. Быстро и всего две строки кода: -D

$keys = array_keys($array);
echo $array[$keys[0]];
0 голосов
/ 06 ноября 2015

Однострочник:

$array = array('key1'=>'value1','key2'=>'value2','key3'=>'key3');
echo key( array_slice( $array, 0, 1, true ) );

# echos 'key1'
0 голосов
/ 28 февраля 2017

Вы можете играть со своим массивом

$daysArray = array('Monday', 'Tuesday', 'Sunday');
$day = current($transport); // $day = 'Monday';
$day = next($transport);    // $day = 'Tuesday';
$day = current($transport); // $day = 'Tuesday';
$day = prev($transport);    // $day = 'Monday';
$day = end($transport);     // $day = 'Sunday';
$day = current($transport); // $day = 'Sunday';

Чтобы получить первый элемент массива, вы можете использовать current, а для последнего элемента вы можете использовать end

Редактировать

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

0 голосов
/ 20 июля 2017

Сегодня мне пришлось искать первый ключ моего массива, возвращенный запросом POST. (И запишите номер для идентификатора формы и т. Д.)

Ну, я нашел это: Возвращает первый ключ ассоциативного массива в PHP

http://php.net/key

Я сделал это, и это работает.

    $data = $request->request->all();
    dump($data);
    while ($test = current($data)) {
        dump($test);
        echo key($data).'<br />';die();
        break;
    }

Может быть, это будет 15 минут от другого парня. КДМ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...