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


что лучше использовать в PHP для добавления элемента массива $array[] = $value или array_push($array, $value) ?

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

10 85

10 ответов:

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

Edit: прогнал этот код:

$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. Интересный.

основная функция array_push() заключается в том, что вы можете нажать несколько значений в конец массива.

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

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

С php docs for array_push:

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

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

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

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

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

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

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

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

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

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

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

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

,array_push...

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

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

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

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