3 Stimmen

Ist es möglich, die Listenfunktion in eine foreach-Anweisung in PHP einzubetten?

Ich habe schon früher über dieses Problem nachgedacht, bin aber nie dazu gekommen. Ich glaube, ich habe es mit Python gemacht, aber nie mit PHP.

Definieren Sie ein einfaches php-Array:

$arr = array (array(1,2,3), array(4,5,6), array(7,8,9));

Führen Sie dann diesen Ausschnitt aus:

foreach ($arr as $row)
{
    list($a, $b, $c) = $row;
    echo "$a, $b, $c <br>";
}

Das ist so üblich, dass ich es während meiner PHP-Karriere bestimmt eine Million Mal gemacht habe... aber es scheint ein bisschen verschwenderisch zu sein. $row ist eine temporäre Variable und wird nie wirklich benutzt, und die list()=-Zeile sollte in die foreach-Klammer eingefügt werden können

Etwa so (das funktioniert natürlich nicht):

foreach ($arr as list($a, $b, $c) = $row)
{
    echo "$a, $b, $c <br>";
}

Weder noch:

foreach ($arr as list($a, $b, $c))
{
    echo "$a, $b, $c <br>";
}

Hat jemand eine coole Abkürzung für dieses Problem gefunden? Danke!

1 Stimmen

Was ist falsch an echo $row[0], $row[1], $row[2], '<br>'; ?

0 Stimmen

Nichts ist falsch mit expliziten Verweisen ... aber in einem großen Block von Code Ich mag benannte Variablen haben.

0 Stimmen

In besserer Form, ich sollte mein Array "$arr" anstelle von $a benannt haben... mein Fehler für das....oh, ich kann bearbeiten, schön. Neu bei SO.

3voto

kitti Punkte 14422

Ja, irgendwie schon. Verwenden Sie dies:

while( list( $key, list( $a, $b, $c ) ) = each( $array ) ) {
    // do stuff here
}

Beachten Sie die Verwendung von list zweimal - each gibt das Schlüssel-Wert-Paar zurück, und der Wert ist ebenfalls ein Array, also verwenden wir list wieder.

Sie können auch Folgendes verwenden list( , list( $a, $b, $c ) ) und ließ aus $key wenn Sie wollen. Aber ich denke, das ist eine ziemlich hässliche Syntax ;)

1voto

Naftali Punkte 141792

Sie können dies versuchen:

$array = array( array(1, 2, 3), array(4, 5, 6), array(7, 8, 9) );
for($next = current($array), list($a, $b, $c) = $next;
    // ^ current array           ^ current list
    $next;
    // ^ check if array
    $next = next($array), list($a, $b, $c) = $next)
    // ^ next array         ^ next array's list
{
    echo "$a, $b, $c <br>".PHP_EOL;
}

Demo: http://codepad.org/cuYl6iaa

Sortie :

1, 2, 3 <br>
4, 5, 6 <br>
7, 8, 9 <br>

1voto

StormByte Punkte 1240

Dadurch wird zwar keine Liste in foreach eingebettet, aber ein anderer Ansatz, den Sie finden können, ist die Verwendung von for anstelle von foreach, und auf diese Weise wird die temporale Variable auf diese Weise umgangen:

$a = array (array(1,2,3), array(4,5,6), array(7,8,9));
$count=(int)count($a);
for ($i=(int)0; $i<count; $i++) {
    list($a, $b, $c)=$a[$i];
    echo "$a, $b, $c<br />";
}

Damit habe ich 2 Variablen mehr hinzugefügt, aber sie enthalten nur Integer, die definitiv reduziert Speicherverbrauch durch Entfernen der temporären Variable, die ein Array enthalten wird.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X