values una funcion filtrar elementos arrayfilter array_walk array_map array aplicar php spl array-map

php - una - array_map vs loop y operación



php array_walk use (2)

Utilizando:

for($i=1; $i<= 10000; ++$i) { $arrayOfNumbers[] = rand(1, 99999); }

¿Pueden algunos explicar por qué existe tal diferencia de velocidad?

array_map(array($maxHeap, ''insert''), $arrayOfNumbers); # Avg Time: 0.92856907844543s # against foreach($arrayOfNumbers as $number) { $maxHeap->insert($number); } # Avg Time: 1.3148670101166

$maxHeap es una class MaxHeap extends SplMaxHeap objeto class MaxHeap extends SplMaxHeap


Por lo que sé, php no hace nada asincrónicamente, en contraste con la respuesta de Sajith Amma.

Sospecho que esto se debe a diferencias en la búsqueda de $maxHeap->insert .

Con el bucle foreach el que está llamando a $maxHeap->insert dentro del alcance actual, el intérprete de php tiene que buscar maxHeap luego la insert búsqueda en la instancia de maxHeap . Dentro del alcance de la secuencia de comandos que está ejecutando puede haber otras variables que pueden hacer que la búsqueda sea más lenta.

Con el array_map el intérprete php sabe que llamará exactamente a la misma $maxHeap->insert , puede hacer la búsqueda una sola vez y usar la misma "dirección de código" para el resto de las iteraciones.


Se debe a la diferencia entre las funciones de devolución de llamada y las funciones normales.

En el segundo, iteración de matriz utilizando foreach, cada iteración llama a la función "insertar" y espera la ejecución (control de devolución de función) y continúa con la siguiente iteración.

Pero en la función array_map, "insert" sucede como función de devolución de llamada, llama a "insert" y no espera el resultado y llama a insert con el siguiente elemento en la matriz. Entonces es más rápido.

Espero eso ayude.