Итак, у нас есть массив $arr и нужно получить первый элемент этого массива.
Нельзя просто сделать так:
$first = $arr[0];
Элемент с индексом 0 может быть просто не определен. Например в случае если массив ассоциативный, либо мы сделали unset($arr[0]).
Способ 1
$first = reset($arr);
Используя reset мы получаем первый элемент, однако есть один побочный эффект: указатель массива также сбрасывается на первый элемент. Хотя в принципе эта функция и предназначена для сброса указателя. Документация по функции reset().
Обратите внимание: если массив пустой reset() вернет false, и этот результат будет неотличим от случая, когда массив не пустой, но содержит false в качестве первого элемента.
$a = array(); $b = array(false, true, true); var_dump(reset($a) === reset($b)); //bool(true)
Способ 2
Можно воспользоваться функцией array_shift — она извлекает первый элемент и при этом удаляет его из переданного массива. Документация по array_shift().
Пример:
$first = array_shift($arr);
Способ 3
Написать свою функцию для этих целей:
function array_first($array, $default = null)
{
foreach ($array as $item) {
return $item;
}
return $default;
}
Преимущество в том, что она не меняет исходный массив. Также вы можете передать параметр $default, который будет использоваться в качестве значения по умолчанию, если массив пустой.
Кстати во фреймворке Laravel эта функция уже определена и позволяет указать еще и callback, в который можно передать условие. Можно например взять первый элемент, который больше 10 или первый элемент, который не является числом.
Вот код более совершенной функции:
function array_first($array, callable $callback = null, $default = null)
if (is_null($callback)) {
if (empty($array)) {
return $default instanceof Closure ? $default() : $default;
}
foreach ($array as $item) {
return $item;
}
}
foreach ($array as $key => $value) {
if (call_user_func($callback, $value, $key)) {
return $value;
}
}
return $default instanceof Closure ? $default() : $default;
}
Ее можно использовать например так:
$array = [100, 200, 300];
$first = array_first($array, function ($value, $key) {
return $value >= 150;
});
echo $first; // 200
Способ 4
Функция current() также пригодна для получения первого элемента массива.
Пример использования:
$transport = array('foot', 'bike', 'car', 'plane');
$mode = current($transport); // $mode = 'foot';
Точнее эта функция используется для возвращения элемента, на котором находится внутренний указатель массива. В большинстве случаев указатель на первом элементе, однако есть ситуации, когда может быть возвращен не первый элемент.
Пример:
$transport = array('foot', 'bike', 'car', 'plane');
next($transport); // перемещаем указатель вперед (http://php.net/manual/ru/function.next.php)
$mode = current($transport); // $mode = 'bike'; — т. е. вернулся уже второй элемент массива.
Спасибо комментатору Alexey Berlinskiy, за этот способ.
Если вы еще знаете способы получения первого элемента — пишите в комментариях.