Performanceunterschiede zwischen in_array, array_key_exists und isset

Neulich wurde ich von einem Kollegen darauf aufmerksam gemacht, wie wenig Performance die Funktion in_array() doch bietet. Dass diese Funktion nicht die „hochperformanteste” ist, war mir schon klar, doch wie langsam/schnell ist sie im Vergleich zu anderen Funktionen. In diesem Test möchte ich die drei Funktionen isset(), array_key_exists() und in_array() testen und beweisen, dass die Funktion in_array() nicht immer die klügste Wahl ist.

Anhand eines Beispiels möchte ich euch zeigen, dass man nicht immer die Funktion in_array() benutzen muss.

Mal angenommen, wir haben folgendes Array:

array("Apfel", "Birne", "Pfirsich");

Um nun zu testen, ob das Array ein Element “Apfel” enthält, würden wir für gewöhnlich folgende Abfrage machen:

if (in_array("Apfel", $array))
array_key_exists isset und in_array performance vergleich
Dieses Diagramm veranschaulicht die Performanceunterschiede zwischen den einzelnen Funktionen.

An diese Stelle möchte ich euch nun auf die Grafik aufmerksam machen. Wie man unschwer erkennen kann, steigt die Laufzeit für die Funktion in_array() exponentiell an mit zunehmender Menge an Elementen.

Die unten stehende Tabelle enthält nochmal die absoluten Zahlen der Messergebnisse.

Array Size in_array in ms array_key_exists in ms isset in ms

1

7

6

5

10

9

6

4

50

21

6

4

100

35

6

4

1.000

334

6

4

5.000

1.642

6

5

15.000

5.228

6

4

50.000

34.623

8

6

Bildschirmfoto 2015-11-26 um 12.07.19
Die Ausgabe des Skripts sieht wie folgt aus.

Und hier nun das Skript, mit welchem die Testergebnisse durchgeführt wurden.

 <?php

$array = array();

for ($i=0; $i<50000; $i++)
{
 $array[$i] = rand(0,1000000);
}

$time1 = microtime(true);
for ($i=0; $i<10000; $i++)
{
 in_array(rand(0,100000),$array);
}

echo "in_array(): ".round((microtime(true)-$time1)*1000, 0)."ms\n";

$time2 = microtime(true);
for ($i=0; $i<10000; $i++)
{
 array_key_exists(rand(0,100000), $array);
}

echo "array_key_exists(): ". round((microtime(true)-$time2)*1000, 0)."ms\n";

$time3 = microtime(true);
for ($i=0; $i<10000; $i++)
{
 isset($array[rand(0,100000)]);
}

echo "isset(): ". round((microtime(true)-$time3)*1000, 0)."ms\n";

?>
Zusammenfassung
Performanceunterschiede zwischen in_array, array_key_exists und isset
Artikeltitel
Performanceunterschiede zwischen in_array, array_key_exists und isset
Beschreibung
In diesem Artikel zeige ich die Performanceunterschiede zwischen in_array, array_key_exists und isset und welche Funktion ihr am besten nutzen solltet.
Autor

Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

E-Mail-Benachrichtigung bei weiteren Kommentaren.
Auch möglich: Abo ohne Kommentar.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden .

Pin It on Pinterest

Durch die weitere Nutzung der Seite stimmst du der Verwendung von Cookies zu. Weitere Informationen

Die Cookie-Einstellungen auf dieser Website sind auf "Cookies zulassen" eingestellt, um das beste Surferlebnis zu ermöglichen. Wenn du diese Website ohne Änderung der Cookie-Einstellungen verwendest oder auf "Akzeptieren" klickst, erklärst du sich damit einverstanden.

Schließen