Wie man Arrays nicht kopieren sollte…

Schon vor einger Zeit fand ich folgendes Schmankerl bei einem Code-Review:

for( $i = 0; $i < count($a_shops); $i++ )
{
  $shop[$i] = $a_shops[$i];
}

Nicht nur, dass eine for-Schleife recht ineffizient ist in diesem Kontext, nicht nur, dass das count() in der Schleifenbedingung vielfach umsonst ausgeführt wird und somit Performance kostet, dieses Monster ist einfach ineffizient und schlecht zu lesen. Und wer auch immer diesen Code erneut anfassen muss, dem geht es dann wie mir: Liegt ein versteckter Sinn hinter diesem Stück Code? Man sucht und sucht und findet – genau nichts… Dieser Code hat keinen tieferen Sinn, und der einzige Effekt dieses Codes ist eine Verlangsamung des betroffenen Scripts. Wesentlich effizienter wäre da

$shop = $a_shops;

Noch einfacher wäre es natürlich, wenn man auf diese Kopie verzichtet, denn wie sich nach Lektüre der restlichen 840 Zeilen Quellcode herausgestellt hat, ist sie völlig überflüssig…

3 comments for “Wie man Arrays nicht kopieren sollte…

  1. 4. Mai 2010 at 13:06

    Nachdem PHP aber Copy-on-Write macht ist die Zeile $shop = $a_shops; nicht so tragisch, wenn der Inhalt von $a_shops nicht verändert wird… das sind nur 4 Bytes, die da durch die Gegend kopiert werden.

  2. Elsensee
    2. Juni 2010 at 19:47

    Mir ist schon mehrmals bei der Programmierung aufgefallen, dass es keinen Sinn macht, Arrays zu kopieren. Man könne ja einfach auf das „originale“ Array zugreifen.

    Viele Grüße
    Elsensee – der aus dem Krankenhaus… (die Variable „shop“ kommt mir doch sehr bekannt vor…)

  3. nuit
    3. Januar 2011 at 11:08

    fuer arrays lohnen sich schleifen echt seltenst…man kann auch die map funktion super fuer soetwas verwenden 🙂 habs aber noch nicht „gebenchmarked“

Schreibe einen Kommentar

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