Массивы: array_shift ($ arr) или $ arr[0]?

#php #arrays

#php #массивы

Вопрос:

Какой из них вы бы использовали?

По сути, я хочу получить только 1-й элемент из массива, вот и все.

Комментарии:

1. Ничего из вышеперечисленного. $first = reset($array); это то, что вы хотите. Будет работать правильно независимо от того, что вы на него бросаете.

2. @Jon: Я уже говорил об этом. 🙂

3. @Tomalakgeret’kal: Так … мне тогда удалить комментарий?

4. @Jon: Нет, сейчас это бесполезно. Этот вопрос в любом случае усеян повторяющимися ответами.

Ответ №1:

Ну, они делают разные вещи.

  • array_shift($arr) извлекает первый элемент из массива и передает его вам.

  • $arr[0] просто дает его вам … если в массиве есть цифровые ключи.

Альтернатива, которая работает и для ассоциативных массивов reset($arr) . Это перемещает внутренний указатель массива, но если вы не используете эти функции, это вряд ли повлияет на вас.

Ответ №2:

array_shift фактически удалит указанное значение из массива. Не используйте его, если вы действительно не хотите уменьшить массив!

Смотрите здесь: http://php.net/manual/en/function .array-shift.php

Ответ №3:

Вы бы использовали $arr[ 0 ]; array_shift удаление первого элемента из массива.

Редактировать


Этот ответ на самом деле находится где-то между неполным и явно неправильным, но, поскольку комментарии двух jon , я думаю, что он должен оставаться в силе, чтобы другие могли видеть этот дискурс.

Правильный ответ:

  • reset это метод для возврата первого определенного индекса массива. Даже в неассоциативных массивах это может быть не 0 индекс.
  • array_shift удалит и вернет значение, которое найдено в reset

OP сделал предположение, что $arr[0] первый индекс не является точным в этом конкретном контексте.

Комментарии:

1. числовой / ассоциативный комментарий, который я видел из всех других, очень важен

2. Исходя из вопроса, ассоциативный массив не является проблемой. Если вы only want to get the 1st element from a array, that's it. , то этот ответ правильный, если не самый полный.

3. это не мой вопрос, и 1st element of an array и arr[0] / element with index zero не эквивалентны в PHP

4. Нет, это не так, но я прочитал вопрос, похожий на: «Учитывая выбор между клубникой и фисташками, скажите, какое ваше любимое мороженое». Правильный ответ — ни то, ни другое (большой поклонник чизкейка). Но, предполагая, что я работаю в рамках этих вариантов, я бы выбрал strawberry .

5. -1: Согласен с jon_darkstar. И мне бы очень хотелось услышать, как бы вы обосновали, что $arr[0] это все еще неправильно работает array(1 => 1, 0 => 0) .

Ответ №4:

$arr[0] работает только в том случае, если массив в виде цифровых ключей.

array_shift удаляет элемент из массива и изменяет сам массив.

Если вы не уверены, что такое первый ключ, и вы не хотите удалять его из массива, вы можете использовать:

 <?php
foreach($arr $k=>$v){
   $value = $v;
   break;
}
  

или даже лучше:

 <?php
reset($arr);
$value = current($arr);
  

Ответ №5:

Если у вас есть ассоциативный массив, вы также можете использовать reset($arr) : он возвращает первый элемент (не удаляет) и устанавливает указатель массива на этот элемент.

Но самый быстрый способ $arr[0] .

Ответ №6:

Вы также хотите изменить arr массив? array_shift удаляет первый элемент массива и возвращает его, таким образом, массив изменился. $arr[0] просто дает вам первый элемент.

Я бы использовал $arr[0] , если бы явно не хотел изменить массив. Позже вы можете добавить код для использования arr массива и забыть, что он был изменен.

Ответ №7:

учитывая, что вам нужно, $arr[0] предпочтительнее, потому что это быстрее. array_shift используется в других ситуациях.

Ответ №8:

arrshift более надежен и всегда возвращает первый элемент в массиве, но это также изменяет массив, удаляя этот элемент.

arr[0] завершится ошибкой, если ваш массив не начинается с индекса 0, но оставляет сам массив в покое.

Более сложный, но надежный метод:

 $keys = array_keys($arr);
$first = $arr[$keys[0]];
  

Ответ №9:

с array_shif у вас есть две операции:

  1. восстановите первый элемент
  2. сдвинуть массив

если вы получаете доступ по индексу, на самом деле у вас есть только одна операция.

Ответ №10:

Если вам нужен первый элемент массива, используйте форму $arr[0] . Преимущества — Простота, удобочитаемость и удобство обслуживания. Продолжайте в том же духе.

Редактировать: используйте индекс 0, только если вы знаете, что массив имеет ключи по умолчанию, начинающиеся с 0.

Комментарии:

1. А также возможность прерывания для множества возможных входных данных, например array('foo' => 'bar') , или array(1 => 1, 0 => 0) .

2. Если вы подумаете об этом, ваш ответ теперь выглядит следующим образом: Чтобы прочитать первый элемент $arr , используйте $arr[0] . Однако это можно сделать, только если первый элемент имеет ключ 0 . Это может и не вводить в заблуждение, но не совсем полезно. Почему бы не сделать это полезным? 🙂

Ответ №11:

Если вы не хотите изменять рассматриваемый массив, используйте $arr[0] (который просто получает первый элемент), в противном случае, если вы хотите удалить первый элемент $arr from $arr , используйте array_shift($arr) .

Например:

 $arr=array(3,-6,2);
$foo=$arr[0]; //$foo==3 and $arr==array(3,-6,2).
$bar=array_shift($arr); //$bar==3 and $arr==array(-6,2).
  

ETA: Как указывали другие, убедитесь, что ваш массив не является ассоциативным массивом (т. Е. Ключи равны 0,1, …, (sizeof($arr)-1) ), Иначе это, вероятно, не сработает.