Что лучше использовать в PHP $ array [] = $ value или array_push ($ array, $ value)? - PullRequest
94 голосов
/ 18 февраля 2009

Что лучше использовать в PHP для добавления члена массива:

$array[] = $value;

или

array_push($array, $value);

Хотя в руководстве говорится, что вам лучше избегать вызова функции, я также прочитал $array[] намного медленнее, чем array_push(). У кого-нибудь есть какие-либо пояснения или ориентиры?

Ответы [ 10 ]

130 голосов
/ 18 февраля 2009

Никаких тестов, но лично я чувствую, что $array[] выглядит чище, и честное разделение волос в течение миллисекунд довольно неактуально, если вы не планируете добавлять сотни тысяч строк в ваш массив.

Редактировать : Выполнить этот код:

$t = microtime(true);
$array = array();
for($i = 0; $i < 10000; $i++) {
    $array[] = $i;
}
print microtime(true) - $t;
print '<br>';
$t = microtime(true);
$array = array();
for($i = 0; $i < 10000; $i++) {
    array_push($array, $i);
}
print microtime(true) - $t;

Первый метод с использованием $array[] почти на 50% быстрее второго.

Некоторые результаты тестов:

Run 1
0.0054171085357666 // array_push
0.0028800964355469 // array[]

Run 2
0.0054559707641602 // array_push
0.002892017364502 // array[]

Run 3
0.0055501461029053 // array_push
0.0028610229492188 // array[]

Это не должно удивлять, так как руководство PHP отмечает это:

Если вы используете array_push () для добавления одного элемента в массив, лучше использовать $ array [] =, потому что в этом случае нет необходимости вызывать функцию.

То, как это сформулировано, не удивлюсь, если array_push будет более эффективным при добавлении нескольких значений. EDIT : из любопытства провел дополнительное тестирование, и даже для большого количества добавлений отдельные $array[] вызовы выполняются быстрее, чем один большой array_push. Интересно.

38 голосов
/ 12 марта 2010

Основное использование array_push () состоит в том, что вы можете поместить несколько значений в конец массива.

В документации говорится :

Если вы используете array_push (), чтобы добавить один элемент массива лучше используйте $ array [] = потому что таким образом нет необходимости называть функция.

25 голосов
/ 12 марта 2010

Из php документации для array_push:

Примечание. Если вы используете array_push () для добавления одного элемента в массив, лучше использовать $ array [] =, потому что в этом случае нет необходимости вызывать функцию.

18 голосов
/ 18 февраля 2009

Говорят на улице, что [] быстрее, потому что нет затрат на вызов функции. Кроме того, никто не любит функции массива PHP ...

"Это ... стог сена, иголка ... или стог сена иголка ... ах, чёрт возьми ... [] ="

8 голосов
/ 12 марта 2010

Одно отличие состоит в том, что вы можете вызывать array_push () с более чем двумя параметрами, то есть вы можете помещать в массив более одного элемента за раз.

$myArray = array();
array_push($myArray, 1,2,3,4);
echo join(',', $myArray);

отпечатков 1,2,3,4

2 голосов
/ 30 июня 2015

Поскольку " array_push " является функцией, и она вызывается несколько раз, когда она находится внутри цикла, поэтому она будет выделять память в стеке. Но когда мы используем $ array [] = $ value, мы просто присваиваем значение массиву.

2 голосов
/ 12 марта 2010

Простое объявление $ myarray [] будет быстрее, поскольку вы просто помещаете элемент в стек элементов из-за отсутствия накладных расходов, которые может принести функция.

1 голос
/ 12 марта 2010

Второй - это вызов функции, поэтому обычно он должен быть медленнее, чем использование основных функций доступа к массиву. Но я думаю, что даже один запрос к базе данных в вашем скрипте перевесит 1.000.000 вызовов на array_push().

0 голосов
/ 14 июня 2016

Я просто не хочу добавлять: int array_push(...) возврат новое количество элементов в массиве ( php doc ). который может быть полезным и более компактным, чем $myArray[] = ...; $total = count($myArray);.

Также array_push(...) имеет смысл, когда переменная используется в качестве стека.

0 голосов
/ 01 августа 2014

Хотя вопрос был больше о производительности, люди придут к этому вопросу, задаваясь вопросом, является ли хорошей практикой использование array_push или $arr[].

Функция может означать меньшее количество строк для нескольких значений:

// 1 line:
array_push($arr, "Bob", "Steve");
// versus 2 lines:
$arr[] = "Bob";
$arr[] = "Steve";

Однако , array_push ...

  • не может получить ключи массива
  • нарушает иголка / стог сена соглашение о присвоении имен
  • медленнее, как обсуждалось

Я буду придерживаться $arr[].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...