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

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

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

Ответ 1

Нет контрольных показателей, но я лично чувствую, что $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 более эффективен при добавлении нескольких значений. РЕДАКТИРОВАТЬ. Из любопытства, проводили некоторые дополнительные испытания и даже для большого количества дополнений, индивидуальные вызовы $array[] выполнялись быстрее, чем один большой array_push. Интересно.

Ответ 2

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

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

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

Ответ 3

Из php docs для array_push:

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

Ответ 4

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

"Это... стога сена, игла.... или это игольная сена... ах, f *** это... [] ="

Ответ 5

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

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

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

Ответ 6

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

Ответ 7

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

Ответ 8

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

Ответ 9

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

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

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

Однако, array_push...

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

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

Ответ 10

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

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