Thiemo Mättig

Thiemo Mättig

In PHP, there is no difference between arrays and hash tables. Arrays are always associative arrays. There are several methods to check if a specific key or value is present in an array. If you know a little bit about data structures you should know that searching for a key should be much more efficient than searching for a value. But how big is the difference? Does it even matter?

My simple benchmark compares in_array( $value, $array ), array_key_exists( $key, $array ) and isset( $array[$key] ) on arrays of different sizes. The number of function calls is always the same (10000), randomly spread so that half of them succeeds and the other half fails. Time is measured using microtime( true ) and rounded to milliseconds.

Array search in PHP: Benchmark to compare in_array, array_key_exists and isset
(Same graph on quadratic/logarithmic scales.)

The result really looks how you think it should look. Searching for a key in a hash table needs constant time, no matter how big the array is. That's exactly why we have hash tables, right? On the other hand, searching for a value in an array needs dramatically more time even on relatively small arrays with only 100 elements. For an array with 10000 elements in_array is more than 100 times slower.

So never ever do in_array( $key, array_keys( $array ) ), that's just stupid.
Kommentar hinzufügen
(bereits 2 Kommentare)
Mein Blog-Nachbar Sven hat eine Videoreihe angefangen und er läuft sich langsam aber sicher richtig gut warm. Spieletest, Filmkritiken, Retro-Zeug und mehr. Wenn ich das Projekt in eine Schublade stecken müsste, würde ich sagen, dass es sich um Geek-Stuff für Geeks und Nerds handelt. Schaut mal rein.
Kommentar hinzufügen
Aktuell in der Fotogalerie:
Vernebelter Hinterhof bei Nacht in einem Wohngebiet mit dreigeschossigen Wohnhäusern
Aktuell im Glow-Entwicklertagebuch: »Gamebrief«
Aktuell bei den Kurzkritiken: »Oblivion«
Aus meinem Spam-Ordner: »Mir ist aufegfallen das Sie zuviel für Ihre Krankenversicherung zahlen.« Ach, die Spammer haben also Zugriff auf meine Kontobewegungen? Naja, seit PRISM wundert sich darüber wahrscheinlich kein Opfer mehr. »475 €uro pro Tag VOLLAUTOMATISCH durch SOFTWARE!« Klar, das funktioniert wahrscheinlich sogar ein paar Tage lang, bis das Bundeskriminalamt klingelt. Ich werde nie verstehen, wie es Menschen geben kann, die auf so etwas hereinfallen. Und die muss es offenbar geben, sonst würde sich das für die Spammer nicht lohnen und sie hätten längst aufgehört.
(bereits 4 Kommentare)
Endspurt im js13kGames-Wettbewerb, daraus gezogene Lehren und Anmerkungen zur Produkt- und Webentwicklung in meiner Twitter-Woche von 2012-09-10 bis 2012-09-16.
Weiter lesen …
Meine Twitter-Woche von 2012-09-03 bis 2012-09-09 drehte sich um den Endspurt im 13-Kilobyte-Spieleentwicklungs-Wettbewerb. Da die Nachricht von Adam Savage (Mythbusters) darin etwas unter geht, möchte ich noch einmal ausdrücklich auf den Dokumentarfilm »Everything is a Remix« hinweisen. Unbedingt angucken!
Weiter lesen …
Von meiner Twitter-Woche von 2012-08-27 bis 2012-09-02 sind nach meinem Aussieben aus irgend einem Grund nur schlaue Sprüche zur Produkt- und Softwareentwicklung übrig geblieben.
Weiter lesen …
Alte Hasslieben und ganz neue Erfahrungen mit prozeduraler Soundgenerierung in meiner Twitter-Woche von 2012-08-20 bis 2012-08-26.
Weiter lesen …

[ Ältere Einträge → ]