Leistung von foreach, array_map mit lambda und array_map mit statischer Funktion

Was ist der performance-Unterschied (falls es welche gibt) zwischen diesen drei Ansätzen, die beide zum umwandeln eines Arrays einem anderen array?

  1. Mit foreach
  2. Mit array_map mit lambda/closure-Funktion
  3. Mit array_map mit 'static' - Funktion/- Methode
  4. Gibt es einen anderen Ansatz?

Machen mir klar, wir haben Blick auf die Beispiele, die alle das gleiche tun - die Multiplikation des array von zahlen von 10:

$numbers = range(0, 1000);

Foreach

$result = array();
foreach ($numbers as $number) {
    $result[] = $number * 10;
}
return $result;

Map mit lambda

return array_map(function($number) {
    return $number * 10;
}, $numbers);

Karte mit 'static' - Funktion als string übergeben Referenz

function tenTimes($number) {
    return $number * 10;
}
return array_map('tenTimes', $numbers);

Gibt es einen anderen Ansatz? Ich werde glücklich sein, zu hören, eigentlich alle Unterschiede zwischen den Fällen von oben, und alle Eingänge, warum sollte man statt des anderen.

Warum gehst du nicht einfach benchmark, und sehen, was passiert?
Gut, ich kann einen benchmark. Aber ich weiß immer noch nicht, wie es intern funktioniert. Auch wenn ich finden Sie heraus, ist schneller, ich weiß immer noch nicht, warum. Ist es, weil der PHP-version? Kommt es auf die Daten? Gibt es einen Unterschied zwischen assoziativen und gewöhnliche arrays? Kann ich natürlich machen ganze suite von benchmarks aber immer einige Theorie spart hier eine Menge Zeit. Ich hoffe, Sie verstehen...
Verspäteter Kommentar, aber nicht while( list($k, $v)= each($array)) schneller als alle der oben genannten? Ich habe nicht gemessen, dieses in php5.6 aber es war in früheren Versionen.

InformationsquelleAutor Pavel S. | 2013-08-09

Schreibe einen Kommentar