Подтвердить что ты не робот

Как получить первый элемент из ассоциативного массива PHP?

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

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

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

4b9b3361

Ответ 1

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

$value = reset($array);

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

Ответ 2

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

$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";

Ответ 3

PHP <7.3

Если вы недостаточно знаете о массиве (вы не уверены, является ли первый ключ 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

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];
}

Ответ 4

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

$first = array_shift($array);

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

$first = current($array);

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

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

Ответ 5

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

Ответ 6

другой простой и простой способ сделать это с помощью array_values ​​

array_values($array)[0]

Ответ 7

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

Вместо

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

Как reset()

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

Ответ 8

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

Пример:

if(is_array($array))
{
  reset($array);
  $first = key($array);
}

Ответ 9

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

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

<?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));
?>

Ответ 10

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

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

Ответ 11

Вы можете использовать array_shift

Ответ 12

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

$a = array(
    'foo' => 400,
    'bar' => 'xyz',
);
$first = current($a);   //400
$last = end($a);    //xyz

Ответ 13

Вы можете сделать:

$values = array_values($array);
echo $values[0];

Ответ 14

Начиная с PHP 7.3.0 можно обойтись без сброса внутреннего указателя. Вы бы использовали array_key_first. Если вы уверены, что ваш массив имеет значения, то вы можете просто сделать:

$first = $array[array_key_first($array)];

Скорее всего, вы захотите обработать случай, когда массив пуст:

$first = (empty($array)) ? $default : $array[array_key_first($array)];

Ответ 15

Вы можете просто использовать $array[0]. это даст вам первый товар всегда