Предположим, у меня два массива:
$a1 = array(0,1,2); $a2 = array(3,4,5);
Я хочу иметь возможность выполнить слияние, которое чередует массивы, а не объединяет их. Я хочу этот результат:
array(0,3,1,4,2,5);
Есть ли собственный способ сделать это, поскольку производительность является проблемой здесь, так как мне нужно делать это тысячи раз
Обратите внимание: я знаю, что могу сделать это вот так:
for (var $i = 0; $i < count($a1); $i++) { newArray[] = $a1[$i]; newArray[] = $b1[$i]; }
Я ищу встроенный способ, если есть более быстрый
$count = count($a1); for ($i = 0; $i < $count; $i++) { $newArray[] = $a1[$i]; $newArray[] = $b1[$i]; }
Моя работа здесь закончена.
$a1 = array(0,1,2); $a2 = array(3,4,5); $start = microtime(TRUE); for($t = 0; $t < 100000; $t++) { $newArray = array(); $count = count($a1); for ($i = 0; $i < $count; $i++) { $newArray[] = $a1[$i]; $newArray[] = $a2[$i]; } } echo round(microtime(TRUE) - $start, 2); # 0.6 $a1 = array(0,1,2); $a2 = array(3,4,5); $start = microtime(TRUE); for($t = 0; $t < 100000; $t++) { $newArray = array(); for ($i = 0; $i < count($a1); $i++) { $newArray[] = $a1[$i]; $newArray[] = $a2[$i]; } } echo round(microtime(TRUE) - $start, 2); # 0.85
Таким образом, предварительный подсчет размера массива будет ~ 1/4 [править] (на 10000 итераций freakin вы получите 0,2 в общей сложности) быстрее. Если вы поместите count()
внутри цикла, он будет пересчитываться на каждой iteration
. 1/4 мне кажется разумнее быстрее. Если вы ищете скомпилированную функцию, вы можете остановиться.
PS Benchmark похож на бикини, он показывает вам все, и ничего.