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

Итак, у нас есть массив $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

Совсем как в Laravel

Способ 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, за этот способ.

Если вы еще знаете способы получения первого элемента — пишите в комментариях.