Verwendung von Strings oder Ganzzahlen als Array-Keys

Die schädigenden Auswirkungen von Konstantenmissbrauch bei der Verwendung von Arrays haben wir bereits verdeutlicht. Nun interessiert uns, welche darüber hinausgehenden Möglichkeiten es bei der Wahl von Array-Schlüsseln gibt, um die Performance zu steigern. Können integere Zahlen oder Strings schneller von PHP interpretiert werden und welche Rolle spielt die Zeichenlänge?

Folgende kleinen Scripte haben wir erstellt und einem Benchmark-Test unterzogen:

Array-Key Ziffer

Code:

<?php
for ($i = 0;$i < 10000;$i++) {
    $test[0] = "Beispiel";
}
?>

Erläuterung:
In einer Schleife wird 10.000mal einem Array mit dem Schlüssel 0 der Wert Beispiel zugewiesen.

Array Key String 1 Zeichen

Code:

<?php
for ($i = 0;$i < 10000;$i++) {
    $test['a'] = "Beispiel";
}
?>

Erläuterung:
Statt der Ziffer 0 verwenden wir in unserem zweiten Beispiel-Code den einstelligen String a.

Array-Key 10 stellige Zahl

Code:

<?php
for ($i = 0;$i < 10000;$i++) {
    $test[1234567890] = "Beispiel";
}
?>

Erläuterung:
Nun möchten wir wissen, welche Auswirkung die Zeichenlänge bzw. Größe der Zahl im Array-Key spielt. Statt der Ziffer 0 in unserem ersten Beispiel verwenden wir als Schlüssel nun eine 10stellige Ganzzahl.

Array Key String 10 Zeichen

Code:

<?php
for ($i = 0;$i < 10000;$i++) {
    $test['abcdefghij'] = "Beispiel";
}
?>

Erläuterung:
Äquivalent zur 10stelligen Ganzzahl wird mit diesem Script die Performance getestet, wenn als Array-Key ein String mit 10 Zeichen verwendet wird.

Ergebnis

Requests per second (RPS)Time per Request (TPR)Vergleich
Array-Key Ziffer148.73 [#/sec] (mean)6.723 [ms] (mean)
10.9%
9.8%
Array Key String 1 Zeichen142.41 [#/sec] (mean)7.022 [ms] (mean)
6.1%
5.8%
Array-Key 10 stellige Zahl147.50 [#/sec] (mean)6.780 [ms] (mean)
9.9%
9.0%
Array Key String 10 Zeichen134.17 [#/sec] (mean)7.453 [ms] (mean)

Eine 0 als Array-Key spart in unserem Benchmark fast 10% Ausführungszeit gegenüber dem Beispiel-Script mit einem 10stelligen String als Array-Key. Auch das Script mit der 10stelligen Zahl als Array-Key ist nur unwesentlich langsamer als das mit dem Array-Key 0. Der 1stellige String spart gegenüber dem 10stelligen String 5,8% der Ausführungszeit.

Fazit

Zahlen sind die „schnelleren” Array-Keys. Geht es um Arrays, die in einem Script an mehreren Stellen oder in mehreren Dateien verwendet werden, sind Zahlen als Schlüssel beim Programmieren jedoch häufig schwierig zu händeln, wenn man nicht unbedingt mit einer Legende arbeiten möchte. Daher sind Strings als Array-Keys beim Programmieren oft die einfachere Lösung. Jedoch sollte man darauf achten, die Länge der Schlüssel so kurz wie möglich zu halten, um nicht unnötig Performance zu verschenken.

 

Anmerkung:
Die Tests wurden mit dem Apache HTTP server benchmarking tool ab auf einem im Februar 2017 nicht mehr dem Stand der Technik entsprechenden Server durchgeführt. Die RPS und TPR der getesteten PHP-Scripte sollten auf einem im Produktiv-Einsatz befindlichen Webserver deutlich besser sein.

Nächster Tipp: