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;

}

 

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

Сертификат SSL Let’s encrypt. Что это такое и где используется?
Web

Сертификат SSL Let’s encrypt. Что это такое и где используется?

Web

Как зашифровать/расшифровать данные на php

Web-технологии: курс для начинающих веб-дизайнеров и разработчиков
Web

Web-технологии: курс для начинающих веб-дизайнеров и разработчиков

Web

Как получать полезные сообщения об ошибках в PHP?