Итак, у нас есть массив $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, за этот способ.
Если вы еще знаете способы получения первого элемента — пишите в комментариях.