2016-04-26 13 views
0

Ich habe ein Stück Code, das im Moment wie folgt aussieht:Unterschied zwischen foreach (if()) und if (foreach())

foreach ($array['subarray'] as $current) { 

    if ($some_variable === 'some_string') { 

     $new_array[] = $current['some_name']; 

    } else { 

     $new_array[] = $current['another_name']; 

    } 
} 

Der gleiche Code auch so geschrieben werden:

if ($some_variable === 'some_string') { 

    foreach ($array['subarray'] as $current) { 

     $new_array[] = $current['some_name']; 

    } 

} else { 

    foreach ($array['subarray'] as $current) { 

     $new_array[] = $current['another_name']; 

    } 
} 

Meine Frage ist; Gibt es einen wirklichen Unterschied zwischen den beiden oder liegt es nur an der Vorliebe? Ich spreche hier hauptsächlich über Leistung, aber auch, wenn es einen Standard gibt, wie das Verschachteln normalerweise in PHP durchgeführt wird.

+0

nur in der ersten Variante 1 'foreach' in der zweiten 2' foreach' und für jeden 'foreach' zugeordneten Speicher. – Naumov

+1

Leistungsmäßig ist das zweite besser (ob es sich um einen wahrnehmbaren Unterschied handelt, hängt von anderen Faktoren ab). Dies liegt daran, dass in der ersten die Bedingung bei jeder Iteration anstelle des Arrays und nicht nur einmal ausgeführt wird. –

+0

Warum verwenden Sie im zweiten Beispiel keine Funktion für diese beiden Schleifen? –

Antwort

4

diese speziellen Beispiele betrachtet, das zweite Beispiel ist besser in der Leistung (wenn die Bedingung nur einmal verwendet), aber dieser Ansatz wäre noch besser:

$new_key = 'default_value'; 
if ($some_variable === 'some_string') { 
    $new_key = 'special_value'; 
} 

foreach ($array['subarray'] as $current) { 
    $new_array[] = $current[$new_key]; 
} 

EDIT

Wenn die Differenz nicht nur der Schlüsselname, dann würde ich die Wahl auf der Komplexität und Ähnlichkeit des Codes in foreach stützen, DRY-Prinzip und Code-Lesbarkeit zuerst und Mikrooptimierung (gewöhnlich nicht wert) als letzte in Betracht ziehend. Es hängt also stark davon ab, was Sie in diesen Schleifen tun, wie wichtig Ihr System ist und wie groß Ihre Datenstrukturen sind.

+0

Ahh, ich sehe, ich war in meinem Beispiel etwas unklar. '$ Current [' default_value ']' variiert mit jeder Iteration. Ein schlecht benutzter Beispielname meinerseits. Aber ich verstehe immer noch deinen Standpunkt. – Szandor

Verwandte Themen