Как вывести первый элемент массива

от admin

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

У меня есть массив:

array( 4 => ‘apple’, 7 => ‘orange’, 13 => ‘plum’ )

Я хочу получить первый элемент этого массива. Ожидаемый результат:

строка apple

Одно требование: это невозможно сделать с передачей по ссылке , поэтому array_shift — это не очень хорошее решение.

Как я могу это сделать по-другому?

Ответ 1

Лучший ответ, но дорогостоящий (O (n)):

array_shift(array_values($array));

Для O(1):

array_pop(array_reverse($array));

Другие варианты использования

Если изменение (в смысле сброса указателей массивов) $array не является проблемой, вы можете использовать:

reset($array);

Теоретически это должно быть более эффективным, если требуется « копия » массива:

array_shift(array_slice($array, 0, 1));

Начиная с PHP 5.4+ (но может вызвать ошибку индекса, если массив пуст):

array_values($array)[0];

Ответ 2

С амый простой способ:

$arr = array( 4 => ‘apple’, 7 => ‘orange’, 13 => ‘plum’ )

echo reset($arr); // Echoes «apple»

Если вы хотите получить ключ: (выполните после сброса)

echo key($arr); // Echoes «4»

Из документации PHP :

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

Ответ 3

  1. array_key_first

  2. array_key_last

Ответ 5

Некоторые массивы не работают с такими функциями, как list, reset или current. Возможно, это « ненастоящие » массивы — частично реализующие ArrayIterator, например.

Если вы хотите вытащить первое значение независимо от массива, вы можете сократить итератор:

foreach($array_with_unknown_keys as $value) break;

Ваше значение будет доступно в $value, а цикл прервется после первой итерации. Это более эффективно, чем копирование потенциально большого массива в функцию типа array_unshift(array_values($arr)). Таким же образом можно получить ключ:

foreach($array_with_unknown_keys as $key=>$value) break;

Если вы вызываете эту функцию из функции — просто вернитесь раньше:

function grab_first($arr) <

foreach($arr as $value) return $value;

>

Ответ 6

Из справочников Laravel:

function head($array) <

return reset($array);

>

Массив передается в функцию по значению, функция reset() воздействует на внутренний указатель копии массива и не затрагивает исходный массив (обратите внимание, что она возвращает false, если массив пуст). Пример использования:

$data = [‘foo’, ‘bar’, ‘baz’];

current($data); // foo

next($data); // bar

head($data); // foo

next($data); // baz

Кроме того, вот альтернатива. Она совсем незначительно быстрее, но более интересна. Она позволяет легко изменить значение по умолчанию, если массив пуст:

function head($array, $default = null) <

foreach ($array as $item) <

return $item;

>

return $default;

>

Мы будем очень благодарны

если под понравившемся материалом Вы нажмёте одну из кнопок социальных сетей и поделитесь с друзьями.

Работа с массивами PHP – создание, наполнение, удаление

Основные примеры работы с массивами PHP. Создание, наполнение, извлечение удаление значений.

Создание массивов

Создать массив и заполнить его значениями

Можно применить функцию array_fill($start, $size, $value) , которая создаст массив с количеством $size элементов со значением $value , начиная с индекса $start .

Данный пример создает массив с тремя элементам «текст», ключи которых будут начинаться с нуля.

Результат:

Еще вариант – функция explode($delimiter, $string) , которая из строки $string создаст массив используя разделитель $delimiter , в данном примере запятая.

Результат:

Узнать количество элементов в массиве

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

Добавление элементов в массив

Добавить значение в начало массива

array_unshift($array, $value) – добавляет одно или несколько элементов в начало массива.

Результат:

Добавить значение в конец массива

array_push($array, $value) – добавляет значение в конец массива.

Результат:

Работа с ключами массива

Поучить первый ключ массива

Функция array_key_first($array) — получает первый ключ массива. Появилась в версии PHP 7.3, для более ранних версий:

Поучить последний ключ массива

Функция array_key_last($array) — получает последний ключ массива. Появилась в версии PHP 7.3, для более ранних версий:

array_shift

array_shift() извлекает первое значение массива array и возвращает его, сокращая размер array на один элемент. Все числовые ключи будут изменены таким образом, что нумерация массива начнётся с нуля, в то время как строковые ключи останутся прежними.

Замечание: Эта функция при вызове сбрасывает указатель массива, переданного параметром.

Список параметров

Возвращаемые значения

Возвращает извлекаемое значение или null , если array пуст или не является массивом.

Примеры

Пример #1 Пример использования array_shift()

Читать:
Whirlpool akp 745 wh как разблокировать

Результат выполнения данного примера:

и значение orange будет присвоено переменной $fruit .

Смотрите также

  • array_unshift() — Добавляет один или несколько элементов в начало массива
  • array_push() — Добавляет один или несколько элементов в конец массива
  • array_pop() — Извлекает последний элемент массива

User Contributed Notes 31 notes

Using array_shift over larger array was fairly slow. It sped up as the array shrank, most likely as it has to reindex a smaller data set.

For my purpose, I used array_reverse, then array_pop, which doesn’t need to reindex the array and will preserve keys if you want it to (didn’t matter in my case).

Using direct index references, i.e., array_test[$i], was fast, but direct index referencing + unset for destructive operations was about the same speed as array_reverse and array_pop. It also requires sequential numeric keys.

Just a useful version which returns a simple array with the first key and value. Porbably a better way of doing it, but it works for me 😉

function array_kshift (& $arr )
<
list( $k ) = array_keys ( $arr );
$r = array( $k => $arr [ $k ]);
unset( $arr [ $k ]);
return $r ;
>

// test it on a simple associative array
$arr = array( ‘x’ => ‘ball’ , ‘y’ => ‘hat’ , ‘z’ => ‘apple’ );

print_r ( $arr );
print_r ( array_kshift ( $arr ));
print_r ( $arr );

//Be careful when using array_pop/shift/push/unshift with irregularly indexed arrays:

$shifty = $poppy = array(
2 => ‘(2)’ ,
1 => ‘(1)’ ,
0 => ‘(0)’ ,
); print_r ( $shifty );

array_shift ( $shifty ); print_r ( $shifty );
// [0] => (1)
// [1] => (0)

array_pop ( $poppy ); print_r ( $poppy );
// [2] => (2)
// [1] => (1)

array_unshift ( $shifty , ‘unshifted’ ); print_r ( $shifty );
// [0] => unshifted
// [b] => B
// [1] => (0)
// [2] => (1)
// [c] => C
// [d] => D

array_push ( $poppy , ‘pushed’ ); print_r ( $poppy );
// [a] => A
// [b] => B
// [0] => (0)
// [1] => (1)
// [c] => C
// [2] => pushed

To remove an element from the MIDDLE of an array (similar to array_shift, only instead of removing the first element, we want to remove an element in the middle, and shift all keys that follow down one position)

Note that this only works on enumerated arrays.

$indexToRemove = 2 ;
unset( $array [ $indexToRemove ]);
$array = array_slice ( $array , 0 );

As pointed out earlier, in PHP4, array_shift() modifies the input array by-reference, but it doesn’t return the first element by reference. This may seem like very unexpected behaviour. If you’re working with a collection of references (in my case XML Nodes) this should do the trick.

/**
* This function exhibits the same behaviour is array_shift(), except
* it returns a reference to the first element of the array instead of a copy.
*
* @param array &$array
* @return mixed
*/
function & array_shift_reference (& $array )
<
if ( count ( $array ) > 0 )
<
$key = key ( $array );
$first =& $array [ $key ];
>
else
<
$first = null ;
>
array_shift ( $array );
return $first ;
>

class ArrayShiftReferenceTest extends UnitTestCase
<

function testFunctionRemovesFirstElementOfNumericallyIndexedArray ()
<
$input = array( ‘foo’ , ‘bar’ );
array_shift_reference ( $input );
$this -> assertEqual (array( ‘bar’ ), $input , ‘%s: The array should be shifted one element left’ );
>

function testFunctionRemovesFirstElementOfAssociativeArray ()
<
$input = array( ‘x’ => ‘foo’ , ‘y’ => ‘bar’ );
array_shift_reference ( $input );
$this -> assertEqual (array( ‘y’ => ‘bar’ ), $input , ‘%s: The array should be shifted one element left’ );
>

function testFunctionReturnsReferenceToFirstElementOfNumericallyIndexedArray ()
<
$foo = ‘foo’ ;
$input = array(& $foo , ‘bar’ );
$first =& array_shift_reference ( $input );
$this -> assertReference ( $foo , $first , ‘%s: The return value should reference the first array element’ );
>

function testFunctionReturnsReferenceToFirstElementOfAssociativeArray ()
<
$foo = ‘foo’ ;
$input = array( ‘x’ => & $foo , ‘y’ => ‘bar’ );
$first =& array_shift_reference ( $input );
$this -> assertReference ( $foo , $first , ‘%s: The return value should reference the first array element’ );
>

function testFunctionReturnsNullIfEmptyArrayPassedAsInput ()
<
$input = array();
$first = array_shift_reference ( $input );
$this -> assertNull ( $first , ‘%s: Array has no first element so NULL should be returned’ );
>

Похожие статьи