Если бы у меня был массив вроде:
$array['foo'] = 400; $array['bar'] = 'xyz';
И я хотел получить первый элемент из этого массива, не зная ключа для него, как бы я это сделал? Есть ли функция для этого?
reset()
дает вам первое значение массива, если у вас есть элемент внутри массива:
$value = reset($array);
Он также дает вам FALSE
если массив пуст.
Поддельный цикл, который разбивается на первую итерацию:
$key = $value = NULL; foreach ($array as $key => $value) { break; } echo "$key = $value\n";
Или используйте each()
( предупреждение: устарело от PHP 7.2.0 ):
reset($array); list($key, $value) = each($array); echo "$key = $value\n";
Есть несколько вариантов. array_shift()
вернет первый элемент, но также удалит первый элемент из массива.
$first = array_shift($array);
current()
вернет значение массива, на который указывает его указатель внутренней памяти, который по умолчанию является первым элементом.
$first = current($array);
Если вы хотите убедиться, что он указывает на первый элемент, вы всегда можете использовать reset()
.
reset($array); $first = current($array);
Просто чтобы у нас были другие варианты: reset($arr);
достаточно хорошо, если вы не пытаетесь сохранить указатель массива на месте, и с очень большими массивами он несет минимальное количество накладных расходов. Тем не менее, есть некоторые проблемы:
$arr = array(1,2); current($arr); // 1 next($arr); // 2 current($arr); // 2 reset($arr); // 1 current($arr); // 1 !This was 2 before! We've changed the array's pointer.
Способ сделать это без изменения указателя:
$arr[reset(array_keys($arr))]; // OR reset(array_values($arr));
Выгода $arr[reset(array_keys($arr))];
заключается в том, что он вызывает предупреждение, если массив фактически пуст.
Другой простой и простой способ сделать это использует array_values
array_values($array)[0]
Мы можем сделать $ first = reset ($ array);
Вместо
reset($array);
$ first = current ($ array);
Как сброс ()
возвращает первый элемент массива после сброса;
Проверьте, если переменная является массивом, прежде чем получить первый элемент. При динамическом создании массива, если он установлен в null, вы получаете ошибку.
Например:
if(is_array($array)) { reset($array); $first = key($array); }
Вы можете использовать array_shift
Я делаю это, чтобы получить первое и последнее значение. Это работает и с большим количеством значений.
$a = array( 'foo' => 400, 'bar' => 'xyz', ); $first = current($a); //400 $last = end($a); //xyz
Если вы не знаете достаточно о массиве (вы не знаете, является ли первый ключ foo или bar ), тогда массив может быть пустым .
Поэтому было бы лучше проверить, особенно если есть вероятность того, что возвращаемое значение может быть логическим FALSE:
$value = empty($arr) ? $default : reset($arr);
Вышеприведенный код использует reset
и имеет побочные эффекты (он сбрасывает внутренний указатель массива), поэтому вы можете предпочесть использовать array_slice
для быстрого доступа к копии первого элемента массива:
$value = $default; foreach(array_slice($arr, 0, 1) as $value);
Предполагая, что вы хотите получить как ключ, так и значение отдельно , вам нужно добавить четвертый параметр в array_slice
:
foreach(array_slice($arr, 0, 1, true) as $key => $value);
Чтобы получить первый элемент в виде пары ( key => value
):
$item = array_slice($arr, 0, 1, true);
Простая модификация для получения последнего элемента, ключа и значения отдельно:
foreach(array_slice($arr, -1, 1, true) as $key => $value);
Вы можете попробовать это.
Чтобы получить первое значение массива: –
<?php $large_array = array('foo' => 'bar', 'hello' => 'world'); var_dump(current($large_array)); ?>
Чтобы получить первый ключ массива
<?php $large_array = array('foo' => 'bar', 'hello' => 'world'); $large_array_keys = array_keys($large_array); var_dump(array_shift($large_array_keys)); ?>
Ты можешь сделать:
$values = array_values($array); echo $values[0];