Как получить первый элемент из ассоциативного массива PHP? - PullRequest
129 голосов
/ 24 октября 2009

Если бы у меня был массив вроде:

$array['foo'] = 400;
$array['bar'] = 'xyz';

И я хотел получить первый элемент из этого массива, не зная ключа для него, как бы я это сделал? Есть ли функция для этого?

Ответы [ 15 ]

254 голосов
/ 24 октября 2009

reset() дает вам первое значение массива, если у вас есть элемент внутри массива:

$value = reset($array);

Это также дает вам FALSE в случае, если массив пуст.

40 голосов
/ 24 октября 2009

Поддельный цикл, который прерывается на первой итерации:

$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";
27 голосов
/ 27 сентября 2017

PHP <7,3 </h1> Если вы недостаточно знаете о массиве (вы не уверены, является ли первый ключ 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_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];
}
23 голосов
/ 24 октября 2009

Есть несколько вариантов. array_shift() вернет первый элемент, но также удалит первый элемент из массива.

$first = array_shift($array);

current() вернет значение массива, на который указывает указатель его внутренней памяти, который является первым элементом по умолчанию.

$first = current($array);

Если вы хотите убедиться, что он указывает на первый элемент, вы всегда можете использовать reset().

reset($array);
$first = current($array);
9 голосов
/ 06 июня 2014

Только для того, чтобы у нас были некоторые другие опции: 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))]; заключается в том, что оно выдает предупреждение, если массив фактически пуст.

6 голосов
/ 27 сентября 2016

другой простой и легкий способ сделать это, используя array_values ​​

array_values($array)[0]
3 голосов
/ 19 июня 2013

Проверьте, является ли переменная массивом, прежде чем получить первый элемент. При динамическом создании массива, если он установлен в нуль, вы получаете ошибку.

Например:

if(is_array($array))
{
  reset($array);
  $first = key($array);
}
3 голосов
/ 28 мая 2010

Мы можем сделать $first = reset($array);

Вместо

reset($array);
$first = current($array);

Как reset()

возвращает первый элемент массива после сброса;

2 голосов
/ 21 марта 2018

Используйте функцию reset (), чтобы получить первый элемент из этого массива, не зная ключа для него, как это.

$value = array('foo' => 400, 'bar' => 'xyz');
echo reset($value);

вывод // 400

2 голосов
/ 06 февраля 2017

Вы можете попробовать это.

Чтобы получить первое значение массива: -

<?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));
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...