it-swarm.com.ru

Что лучше использовать в PHP $ array [] = $ value или array_Push ($ array, $ value)?

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

$array[] = $value;

или же

array_Push($array, $value);

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

91
alex

Никаких тестов, но лично я чувствую, что $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. Интересно.

127
Paolo Bergantino

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

Это говорит в документации :

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

38
Inspire

Из документов php для array_Push :

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

25
Benedict Cohen

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

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

16
typeoneerror

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

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

печатает 1,2,3,4

8
VolkerK

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

2
Vinod Kirte

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

2
Tom Hallam

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

1
Stefan Gehrig

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

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

0
Jean-Luc Barat

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

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

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

Однако , array_Push...

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

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

0
rybo111