Если у меня был массив вроде:
$array['foo'] = 400;
$array['bar'] = 'xyz';
И я хотел получить первый элемент из этого массива, не зная ключа для него, как бы я это сделал? Есть ли функция для этого?
Если у меня был массив вроде:
$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";
Если вы недостаточно знаете о массиве (вы не уверены, является ли первый ключ 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);
Если массив не очень большой, вам на самом деле не нужен array_slice
и вы можете получить копию всего массива ключей, а затем получить первый элемент:
$key = count($arr) ? array_keys($arr)[0] : null;
Однако, если у вас очень большой массив, вызов array_keys
потребует значительного времени и памяти больше, чем array_slice
(обе функции обходят массив, но последняя завершает работу, как только array_slice
требуемое количество элементов - то есть один),
Заметное исключение - когда у вас есть первый ключ, который указывает на очень большой и извилистый объект. В этом случае array_slice
будет дублировать этот первый большой объект, а array_keys
будет захватывать только ключи.
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];
}
Есть несколько вариантов. 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 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);
Как reset()
возвращает первый элемент массива после сброса;
Проверьте, является ли переменная переменной массивом, прежде чем получить первый элемент. При динамическом создании массива, если он установлен в null, вы получаете сообщение об ошибке.
Пример:
if(is_array($array))
{
reset($array);
$first = key($array);
}
Вы можете попробовать это.
Чтобы получить первое значение массива: -
<?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));
?>
Используйте функцию reset(), чтобы получить первый элемент из этого массива, не зная ключа для него, как это.
$value = array('foo' => 400, 'bar' => 'xyz');
echo reset($value);
Вы можете использовать array_shift
Я делаю это, чтобы получить первое и последнее значение. Это работает и с большим количеством значений.
$a = array(
'foo' => 400,
'bar' => 'xyz',
);
$first = current($a); //400
$last = end($a); //xyz
Вы можете сделать:
$values = array_values($array);
echo $values[0];
Начиная с PHP 7.3.0 можно обойтись без сброса внутреннего указателя. Вы бы использовали array_key_first
. Если вы уверены, что ваш массив имеет значения, то вы можете просто сделать:
$first = $array[array_key_first($array)];
Скорее всего, вы захотите обработать случай, когда массив пуст:
$first = (empty($array)) ? $default : $array[array_key_first($array)];
Вы можете просто использовать $array[0]
. это даст вам первый товар всегда