Web

Как получить первый элемент массива в PHP

У меня есть массив:

array( 4 => 'apple', 7 => 'orange', 13 => 'plum' )

Я хочу получить первый элемент этого массива. Ожидаемый результат: 

строка apple

Одно требование: это невозможно сделать с передачей по ссылке, поэтому array_shift это не очень хорошее решение.

Как я могу это сделать по-другому?

 

Ответ 1

Лучший ответ, но дорогостоящий (O (n)):

array_shift(array_values($array));

 

Для O(1):

array_pop(array_reverse($array));

 

Другие варианты использования

Если изменение (в смысле сброса указателей массивов) $array не является проблемой, вы можете использовать:

reset($array);

 

Теоретически это должно быть более эффективным, если требуется «копия» массива:

array_shift(array_slice($array, 0, 1));

 

Начиная с PHP 5.4+ (но может вызвать ошибку индекса, если массив пуст):

array_values($array)[0];

 

Ответ 2

Самый простой способ:

$arr = array( 4 => 'apple', 7 => 'orange', 13 => 'plum' )

echo reset($arr); // Echoes "apple"

 

Если вы хотите получить ключ: (выполните после сброса)

echo key($arr); // Echoes "4"

 

Из документации PHP:

reset() перематывает внутренний указатель массива на первый элемент и возвращает значение первого элемента массива или FALSE, если массив пуст.

 

Ответ 3

current($array)

возвращает первый элемент массива, согласно руководству PHP.

Каждый массив имеет внутренний указатель на его «текущий» элемент, который инициализируется на первый элемент, вставленный в массив.

Так что это работает до тех пор, пока вы не переместите указатель массива, а в противном случае вам придется использовать функцию reset(), которая перемотает массив и вернет первый элемент массива.

Согласно руководству PHP, reset.

reset() перематывает внутренний указатель массива на первый элемент и возвращает значение первого элемента массива.

Примеры функций current() и reset() 

$array = array('step one', 'step two', 'step three', 'step four');

// по умолчанию указатель находится на первом элементе

echo current($array) . "<br />\n"; // "step one"

//передаем указатель массива и затем сбрасываем его

 

//пропустить два шага

next($array);

next($array);

echo current($array) . "<br />\n"; // "step three"

// сбросить указатель, начать заново с первого шага

echo reset($array) . "<br />\n"; // "step one"

 

Ответ 4

В PHP 7.3 были добавлены две функции для получения первого и последнего ключа массива напрямую без модификации исходного массива и без создания временных объектов:

  1. array_key_first

  2. array_key_last

Помимо семантического смысла, эти функции даже не перемещают указатель массива (как это сделал бы foreach). Имея ключи, можно получить значения непосредственно по ключам.

Примеры (все они требуют PHP 7.3+)

Получение первого/последнего ключа и значения:

$my_array = ['IT', 'rules', 'the', 'world'];

$first_key = array_key_first($my_array);

$first_value = $my_array[$first_key];

$last_key = array_key_last($my_array);

$last_value = $my_array[$last_key];

 Получение первого/последнего значения в виде однострочных строк, предполагая, что массив не может быть пустым:

$first_value = $my_array[ array_key_first($my_array) ];

$last_value = $my_array[ array_key_last($my_array) ];

 Получение первого/последнего значения в виде однострочных строк с настройками по умолчанию для пустых массивов:

$first_value = empty($my_array) ? 'default' : $my_array[ array_key_first($my_array) ];

$last_value = empty($my_array) ? 'default' : $my_array[ array_key_last($my_array) ];

 

 

Ответ 5

Некоторые массивы не работают с такими функциями, как list, reset или current. Возможно, это «ненастоящие» массивы частично реализующие ArrayIterator, например.

 Если вы хотите вытащить первое значение независимо от массива, вы можете сократить итератор:

foreach($array_with_unknown_keys as $value) break;

Ваше значение будет доступно в $value, а цикл прервется после первой итерации. Это более эффективно, чем копирование потенциально большого массива в функцию типа array_unshift(array_values($arr)). Таким же образом можно получить ключ:

foreach($array_with_unknown_keys as $key=>$value) break;

Если вы вызываете эту функцию из функции — просто вернитесь раньше:

function grab_first($arr) {

    foreach($arr as $value) return $value;

}

 

Ответ 6

Из справочников Laravel:

function head($array) {

    return reset($array);

}

Массив передается в функцию по значению, функция reset() воздействует на внутренний указатель копии массива и не затрагивает исходный массив (обратите внимание, что она возвращает false, если массив пуст). Пример использования:

$data = ['foo', 'bar', 'baz'];

current($data); // foo

next($data); // bar

head($data); // foo

next($data); // baz

Кроме того, вот альтернатива. Она совсем незначительно быстрее, но более интересна. Она позволяет легко изменить значение по умолчанию, если массив пуст:

function head($array, $default = null) {

    foreach ($array as $item) {

        return $item;

    }

    return $default;

}

 

Схожие статьи

Web

Допустимо ли использование коротких тегов PHP?

Как правильно выбрать имя домена для своего сайта? Лучшие примеры
Web

Как правильно выбрать имя домена для своего сайта? Лучшие примеры

Web

Как я могу хранить и извлекать изображения из базы данных MySQL с помощью PHP

Поиск по GitHub: как найти репозитории, нужный код или разработчика?
Web

Поиск по GitHub: как найти репозитории, нужный код или разработчика?

×