Comments 13
Ну… по сути то же самое что и конкатенация строк в том же С (c-style строки) по трудоемкости
0
3 раза прочёл, но твою мысль так и не понял :)
+3
Если грубо — имеется ввиду, что вызов одного метода array_merge на 1000 массивов выгоднее по времени, чем циклические 1000 вызовов array_merge на одном массиве.
+1
Я имел в виду, что либо мы вот так бы в цикле выделяли место под новую строку, размером в сумму 2х, копировали в нее первую, конкатенировали 2ю. Либо набирали бы все строки для склеивания в массив строк, а потом бы выделяли 1 большую строку для конкатенации всех этих строк. Во втором случае отсутствует шаг «копировали в нее первую», за счет чего должно повыситься быстродействие. Собственно, в этом и аналогия.
p.s. Вариант с одной большой строкой «про запас, чтобы хватило на все случаи жизни» не рассматриваем ;)
p.s. Вариант с одной большой строкой «про запас, чтобы хватило на все случаи жизни» не рассматриваем ;)
0
Если требуется именно скорость, то можно пожертвовать компактностью, и будет еще быстрее:
for ($i = 0; $i < 1000; $i++) {
foreach(array(1, 2, 3) as $v) {
$array1[] = $v;
}
}
+5
В 2 раза быстрее.
0
Опа, как забавно. Завтра опробую на своих реальных данных и отпишусь (кто его знает, как оно себя поведет на разном кол-ве итераций и разных размерах склеиваемых массивов).
0
Еще фишка… Мож у меня как-то php криво встал, может быть еще что (сам скрипт вроде правильно написан)…
Если запускать ваш скрипт полностью, то второй случай (с call_user_func_array) выдает где-то 8-10 мкс, а если закомментить строки 1-6, то уже получается 20-25 мкс…
Как-то странно что первый цикл влияет на время выполнения второго…
Если запускать ваш скрипт полностью, то второй случай (с call_user_func_array) выдает где-то 8-10 мкс, а если закомментить строки 1-6, то уже получается 20-25 мкс…
Как-то странно что первый цикл влияет на время выполнения второго…
0
Sign up to leave a comment.
PHP — оптимизация многочисленных array_merge()