2009-10-20 11 views
23

zu iterieren Ich studiere für die Zend PHP-Zertifizierung.Schnellste Möglichkeit, Array in PHP

Nicht sicher, die Antwort auf diese Frage.

Frage: Was ist der beste Weg, um jedes Element eines Arrays mit PHP 5 zu iterieren und zu modifizieren?

a) Sie nicht ein Array während der Iteration ändern

b) for($i = 0; $i < count($array); $i++) { /* ... */ }

c) foreach($array as $key => &$val) { /* ... */ }

d) foreach($array as $key => $val) { /* ... */ }

e) while(list($key, $val) = each($array)) { /* ... */ }


Mein Instinkt ist (B), da es keine Notwendigkeit gibt, temporäre Variable zu erstellen, dann merke ich, es wird nicht für assoziative Arrays arbeiten. Weitere Suche im Internet gefunden: Speichern der invarianten Array-Anzahl in einer separaten Variablen verbessert die Leistung.

$cnt = count($array); 
for ($i = 0; $i < $cnt; $i++) { } 

Antwort

20

Von diesen Optionen wäre C die offensichtliche Antwort.

Die restlichen Optionen (neben A) können verwendet werden, um das zu erreichen, abhängig vom Code innerhalb der Klammer, aber die Frage zeigt diesen Code NICHT. Also muss es C.

Und Sie beantworten die falsche Frage - ja, doing count() vor dem für Zyklus wird die Leistung verbessern, aber diese Frage ist nicht über die Leistung.

+0

Der "using PHP' 5' "-Teil kann auch ein Hinweis sein. b), d), e) sind in php4 möglich, c) aber nicht.Zugegeben, das ist ein schwacher Beweis, aber die Prüfungsfrage funktioniert oft auf diese Weise ;-) Da Sie eine andere Tabellennachfrage brauchen, um auf das Element für b, d, e zuzugreifen, ist es offensichtlich, dass c) "der beste" Weg ist. Das Handbuch besagt auch, dass dies nicht mit 'foreach (array (1,2,3) as & $ v)' funktioniert, das traversable muss eine Variable sein. – VolkerK

3

SPL wäre die beste Antwort hier.

+0

+1, auch ist es nur "die halbe Lösung" –

+0

SPL löst die Frage nicht. Auch wenn es als Antwort verfügbar war, wir sprechen über Looping, nicht über das Traversable-Verfahren. –

10

Sie können jedes Element eines Arrays mit einem der gezeigten Konstrukte iterieren und modifizieren. Aber einige Hinweise dazu:

b) Ist nur sinnvoll, wenn das Array ein numerisches Array mit den Schlüsseln von 0 bis n-1 ist.

c) Ist nützlich für beide Arten von Arrays. Zusätzlich ist $value eine Referenz des Elementwerts. Wenn Sie $value innerhalb von foreach ändern, ändert sich auch der ursprüngliche Wert.

d) Wie c) außer $value ist eine Kopie des Wertes (beachten Sie, dass foreach auf einer Kopie von $array arbeitet). Mit dem Schlüssel des Elements können Sie jedoch auf den ursprünglichen Wert mit $array[$key] zugreifen und ihn ändern.

e) Wie d). Verwenden Sie $array[$key], um auf das ursprüngliche Element zuzugreifen und es zu ändern.

+1

ehrfürchtige Erklärung. Schade, dass ich nur einen Upvote geben kann – rinchik

Verwandte Themen