Если вы недостаточно знаете о массиве (вы не уверены, является ли первый ключ foo или bar ), тогда массив также может быть, может быть, пустым .
Поэтому было бы лучше проверить, особенно если есть вероятность, что возвращаемое значение может быть логическим FALSE:
$value = empty($arr)? $default : reset($arr);
Приведенный выше код использует resetи поэтому имеют побочные эффекты (она сбрасывает внутренний указатель массива), так что вы можете предпочитаете использовать array_sliceдля быстрого доступа к копии первого элемента массива:
Если массив не очень большой, вам на самом деле не нужно, array_sliceи вы можете получить копию всего массива ключей, а затем получить первый элемент:
$key = count($arr)? array_keys($arr)[0]:null;
Однако, если у вас очень большой массив, для вызова array_keysпотребуется больше времени и памяти больше, чем array_slice(обе функции обходят массив, но последняя завершает работу, как только набирает требуемое количество элементов - то есть один).
Заметное исключение - когда у вас есть первый ключ, который указывает на очень большой и извилистый объект. В этом случае array_sliceбудет дублировать этот первый большой объект, а array_keysзахватывать будут только ключи.
PHP 7.3
PHP 7.3 реализует array_key_first()так же, как и array_key_last(). Они явно предоставлены для эффективного доступа к первому и последнему ключам без сброса внутреннего состояния массива в качестве побочного эффекта.
Таким образом , в PHP 7.3 первое значение из $arrayмогут быть доступны с
$array[array_key_first($array)];
Вам все равно лучше проверить, что массив не пустой, иначе вы получите ошибку:
$firstKey = array_key_first($array);if(null=== $firstKey){
$value ="Array is empty";// An error should be handled here}else{
$value = $array[$firstKey];}
@AhmedShefeer хорошо, другой ответ не только принят, но был там еще восемь лет . Я как бы собираю крошки здесь :-D. Но спасибо за доверие!
LSerni
1
Мне кажется, что это лучший ответ, так как единственная другая не осуждаемая, которая дает ключ и значение, это прерванный цикл foreach, что неудобно. Другие ответы дают только значение без ключа.
Sootsnoot
1
очень понравился этот, современный подход и со временем обновляется.
Санжит Бишт
@LSerni Не знаю, если вы все еще активны, но я застрял, и этот хорошо объясненный и обновленный пост спас меня. Спасибо
Izk
@izk Я всегда активен! :-D
LSerni
44
Поддельный цикл, который прерывается на первой итерации:
Потому что решение находится в вашей первой строке кода, но вы продолжаете писать еще одну совершенно ненужную строку.
Маркус
21
Сброс не вернет ключ
HarryFink
3
+1 за «фальшивую петлю». Мне нужно было получить ключ и значение первых элементов, не проходя через каждый элемент. reset()Функция будет извлекать только первое значение.
Фил Кросс
2
+1 для фальшивого цикла, мне нужно сохранить ключ, чтобы сброс не был опцией
isJustMe
25
Там есть несколько вариантов. array_shift()вернет первый элемент, но он также удалит первый элемент из массива.
$first = array_shift($array);
current() вернет значение массива, на который указывает указатель его внутренней памяти, который является первым элементом по умолчанию.
$first = current($array);
Если вы хотите убедиться, что он указывает на первый элемент, вы всегда можете использовать reset().
Мне нравится этот ответ как наиболее полный, но на reset()самом деле note возвращает элемент, поэтому после него с $first = current($array)избыточностью.
Том Ожер
9
Просто для того, чтобы у нас были некоторые другие варианты: reset($arr);достаточно, если вы не пытаетесь удерживать указатель массива на месте, а с очень большими массивами это требует минимальных затрат. Тем не менее, есть некоторые проблемы с этим:
reset()это гораздо лучший вариант, так как он возвращает false, если массив пуст. ваше решение не сработает, например, в вопросе
Northys
1
В PHP 7+ примерно так будет работать:array_values($array)[0] ?? FALSE
MarthyM
4
Проверьте, является ли переменная массивом, прежде чем получить первый элемент. При динамическом создании массива, если он установлен в нуль, вы получаете ошибку.
Это работает только тогда, когда внутренний указатель находится на первом элементе. Хотя это хорошо, потому что он не сбрасывает положение указателя, он работает только тогда, когда указатель уже находится в состоянии покоя.
CJC
1
Начиная с PHP 7.3.0 можно обойтись без сброса внутреннего указателя. Вы бы использовали array_key_first. Если вы уверены, что ваш массив имеет значения, то вы можете просто сделать:
$first = $array[array_key_first($array)];
Скорее всего, вы захотите обработать случай, когда массив пуст:
Ответы:
reset()
дает вам первое значение массива, если у вас есть элемент внутри массива:Это также дает вам,
FALSE
если массив пуст.источник
$arr = array(/* stuff */); $val = $arr? reset($arr): /* value to indicate array is empty */;
PHP <7.3
Если вы недостаточно знаете о массиве (вы не уверены, является ли первый ключ foo или bar ), тогда массив также может быть, может быть, пустым .
Поэтому было бы лучше проверить, особенно если есть вероятность, что возвращаемое значение может быть логическим FALSE:
Приведенный выше код использует
reset
и поэтому имеют побочные эффекты (она сбрасывает внутренний указатель массива), так что вы можете предпочитаете использоватьarray_slice
для быстрого доступа к копии первого элемента массива:Предполагая, что вы хотите получить ключ и значение отдельно , вам нужно добавить четвертый параметр в
array_slice
:Чтобы получить первый элемент в виде пары (
key => value
):Простая модификация для получения последнего элемента, ключа и значения отдельно:
производительность
Если массив не очень большой, вам на самом деле не нужно,
array_slice
и вы можете получить копию всего массива ключей, а затем получить первый элемент:Однако, если у вас очень большой массив, для вызова
array_keys
потребуется больше времени и памяти больше, чемarray_slice
(обе функции обходят массив, но последняя завершает работу, как только набирает требуемое количество элементов - то есть один).Заметное исключение - когда у вас есть первый ключ, который указывает на очень большой и извилистый объект. В этом случае
array_slice
будет дублировать этот первый большой объект, аarray_keys
захватывать будут только ключи.PHP 7.3
PHP 7.3 реализует
array_key_first()
так же, как иarray_key_last()
. Они явно предоставлены для эффективного доступа к первому и последнему ключам без сброса внутреннего состояния массива в качестве побочного эффекта.Таким образом , в PHP 7.3 первое значение из
$array
могут быть доступны сВам все равно лучше проверить, что массив не пустой, иначе вы получите ошибку:
источник
Поддельный цикл, который прерывается на первой итерации:
Или используйте
each()
( предупреждение: устарело с PHP 7.2.0 ):источник
reset()
Функция будет извлекать только первое значение.Там есть несколько вариантов.
array_shift()
вернет первый элемент, но он также удалит первый элемент из массива.current()
вернет значение массива, на который указывает указатель его внутренней памяти, который является первым элементом по умолчанию.Если вы хотите убедиться, что он указывает на первый элемент, вы всегда можете использовать
reset()
.источник
reset()
самом деле note возвращает элемент, поэтому после него с$first = current($array)
избыточностью.Просто для того, чтобы у нас были некоторые другие варианты:
reset($arr);
достаточно, если вы не пытаетесь удерживать указатель массива на месте, а с очень большими массивами это требует минимальных затрат. Тем не менее, есть некоторые проблемы с этим:Способ сделать это без изменения указателя:
Преимущество
$arr[reset(array_keys($arr))];
заключается в том, что он выдает предупреждение, если массив фактически пуст.источник
другой простой и легкий способ сделать это, используя array_values
источник
reset()
это гораздо лучший вариант, так как он возвращает false, если массив пуст. ваше решение не сработает, например, в вопросеarray_values($array)[0] ?? FALSE
Проверьте, является ли переменная массивом, прежде чем получить первый элемент. При динамическом создании массива, если он установлен в нуль, вы получаете ошибку.
Например:
источник
Мы можем сделать
$first = reset($array);
Вместо того
Так как
reset()
возвращает первый элемент массива после сброса;
источник
Ты можешь сделать:
источник
Используйте функцию reset (), чтобы получить первый элемент из этого массива, не зная ключа для него, как это.
выход // 400
источник
Вы можете попробовать это.
Чтобы получить первое значение массива: -
Чтобы получить первый ключ массива
источник
Вы могли бы использовать array_shift
источник
Я делаю это, чтобы получить первое и последнее значение. Это работает с большим количеством значений тоже.
источник
Начиная с PHP 7.3.0 можно обойтись без сброса внутреннего указателя. Вы бы использовали
array_key_first
. Если вы уверены, что ваш массив имеет значения, то вы можете просто сделать:Скорее всего, вы захотите обработать случай, когда массив пуст:
источник
Вы можете просто использовать
$array[0]
. это даст вам первый товар всегдаисточник