it-swarm.com.de

Verwenden von geschweiften Klammern mit dynamischen Variablennamen in PHP

Ich versuche, dynamische Variablennamen zu verwenden (ich bin nicht sicher, wie sie eigentlich heißen), aber ziemlich genau so:

for($i=0; $i<=2; $i++) {
    $("file" . $i) = file($filelist[$i]);
}

var_dump($file0);

Die Rückkehr ist null, was mir sagt, dass es nicht funktioniert. Ich habe keine Ahnung, welche Syntax oder welche Technik ich hier suche, was die Recherche erschwert. $filelist wurde zuvor definiert.

161
user1159454

Wickeln Sie sie in {}:

${"file" . $i} = file($filelist[$i]);

Arbeitsbeispiel


Mit ${} können Sie dynamische Variablen erstellen. Ein einfaches Beispiel:

${'a' . 'b'} = 'hello there';
echo $ab; // hello there
440
Sarfraz

Überblick

In PHP können Sie einfach einen zusätzlichen $ vor einer Variablen einfügen, um daraus eine dynamische Variable zu machen:

$$variableName = $value;

Ich würde es zwar nicht empfehlen, aber Sie könnten dieses Verhalten sogar verketten:

$$$$$$$$DoNotTryThisAtHomeKids = $value;

Sie können $variableName zwischen {}:

${$variableName} = $value;

Die Verwendung von {} ist nur dann obligatorisch, wenn der Name Ihrer Variablen selbst aus mehreren Werten besteht, wie zum Beispiel:

${$variableNamePart1 . $variableNamePart2} = $value;

Es wird jedoch empfohlen, immer {} zu verwenden, da dies besser lesbar ist.

Unterschiede zwischen PHP5 und PHP7

Ein weiterer Grund, {} immer zu verwenden, besteht darin, dass PHP5 und PHP7 eine etwas andere Art haben, mit dynamischen Variablen umzugehen, was in einigen Fällen zu einem anderen Ergebnis führt.

In PHP7 werden dynamische Variablen, Eigenschaften und Methoden jetzt strikt in der Reihenfolge von links nach rechts ausgewertet, im Gegensatz zur Kombination von Spezialfällen in PHP5. Die folgenden Beispiele zeigen, wie sich die Reihenfolge der Auswertung geändert hat.

Fall 1: $$foo['bar']['baz']

  • PHP5-Interpetation: ${$foo['bar']['baz']}
  • PHP7-Interpetation: ${$foo}['bar']['baz']

Fall 2: $foo->$bar['baz']

  • PHP5-Interpetation: $foo->{$bar['baz']}
  • PHP7-Interpetation: $foo->{$bar}['baz']

Fall 3: $foo->$bar['baz']()

  • PHP5-Interpetation: $foo->{$bar['baz']}()
  • PHP7-Interpetation: $foo->{$bar}['baz']()

Fall 4: Foo::$bar['baz']()

  • PHP5-Interpetation: Foo::{$bar['baz']}()
  • PHP7-Interpetation: Foo::{$bar}['baz']()
66
John Slegers

Versuchen Sie es mit {} anstelle von ():

${"file".$i} = file($filelist[$i]);
20

Ich mache das ziemlich oft für Ergebnisse, die aus einer Abfrage stammen.

z.B.

// $MyQueryResult is an array of results from a query

foreach ($MyQueryResult as $key=>$value)
{
   ${$key}=$value;
}

Jetzt kann ich einfach $ MyFieldname (was in Echoanweisungen usw. einfacher ist) anstelle von $ MyQueryResult ['MyFieldname'] verwenden

Ja, es ist wahrscheinlich faul, aber ich hatte noch nie Probleme. 

4
Tom

Wenn Sie bereits über ein Array verfügen, können Sie dieses Array in ein Objekt konvertieren und wie folgt verwenden:

$r = (object) $MyQueryResult;
echo $r->key;
2
corysus

Versuchen Sie es mit {} anstelle von ():

${"file".$i} = file($filelist[$i]);
0
Vildan Bina

Ich war in einer Position, in der ich 6 identische Arrays hatte, und ich musste das richtige Array in Abhängigkeit von einer anderen Variablen auswählen und dann Werte zuweisen. In dem hier gezeigten Fall war $ comp_cat 'a', also musste ich mein 'a'-Array auswählen (ich hatte natürlich auch' b 'bis' f '- Arrays).

Beachten Sie, dass die Werte für die Position der Variablen im Array nach der schließenden Klammer stehen.

$ {'comp_cat _'. $ comp_cat .'_ arr '} [1] [0] = "FRED BLOGGS";

$ {'comp_cat _'. $ comp_cat .'_ arr '} [1] [1] = $ file_tidy;

echo 'Erster Arraywert ist'. $ comp_cat_a_arr [1] [0]. ' und der zweite Wert ist. $ comp_cat_a_arr [1] [1];

0
M61Vulcan

ich habe eine Lösung für dynamisch erstellte Variablenwerte und kombiniert alle Werte in einer Variablen.

if($_SERVER['REQUEST_METHOD']=='POST'){
    $r=0;
    for($i=1; $i<=4; $i++){
        $a = $_POST['a'.$i];
        $r .= $a;
    }
    echo $r;
}
0
Murad