J'essaie d'utiliser des noms de variables dynamiques (je ne suis pas sûr de leur nom) mais à peu près comme ceci:
for($i=0; $i<=2; $i++) {
$("file" . $i) = file($filelist[$i]);
}
var_dump($file0);
Le retour est null
ce qui me dit que cela ne fonctionne pas. Je n'ai aucune idée de la syntaxe ou de la technique que je recherche ici, ce qui rend la recherche difficile. $filelist
est défini plus tôt.
php
variables
dynamic
dynamic-variables
user1159454
la source
la source
Réponses:
Enveloppez-les dans
{}
:${"file" . $i} = file($filelist[$i]);
Exemple de travail
L'utilisation
${}
est un moyen de créer des variables dynamiques, exemple simple:${'a' . 'b'} = 'hello there'; echo $ab; // hello there
la source
${'fixedTime$i'} = $row['timeInstance'];
vous donne un pas très utile$fixedTime$i
au lieu de$fixedTime1, $fixedTime2
etc. (heureusement repéré presque tout de suite.)Aperçu
En PHP, vous pouvez simplement mettre un extra
$
devant une variable pour en faire une variable dynamique:Bien que je ne le recommande pas, vous pouvez même enchaîner ce comportement:
Vous pouvez mais n'êtes pas obligé de mettre
$variableName
entre{}
:L'utilisation
{}
n'est obligatoire que lorsque le nom de votre variable est lui-même une composition de plusieurs valeurs, comme ceci:Il est néanmoins recommandé de toujours l'utiliser
{}
, car c'est plus lisible.Différences entre PHP5 et PHP7
Une autre raison de toujours utiliser
{}
, c'est que PHP5 et PHP7 ont une manière légèrement différente de traiter les variables dynamiques, ce qui entraîne un résultat différent dans certains cas.En PHP7, les variables dynamiques, les propriétés et les méthodes seront désormais évaluées strictement dans l'ordre de gauche à droite, par opposition au mélange de cas spéciaux en PHP5. Les exemples ci-dessous montrent comment l'ordre d'évaluation a changé.
Cas 1 :
$$foo['bar']['baz']
${$foo['bar']['baz']}
${$foo}['bar']['baz']
Cas 2:
$foo->$bar['baz']
$foo->{$bar['baz']}
$foo->{$bar}['baz']
Cas 3:
$foo->$bar['baz']()
$foo->{$bar['baz']}()
$foo->{$bar}['baz']()
Cas 4:
Foo::$bar['baz']()
Foo::{$bar['baz']}()
Foo::{$bar}['baz']()
la source
Essayez d'utiliser
{}
au lieu de()
:${"file".$i} = file($filelist[$i]);
la source
$price_for_monday = 10; $price_for_tuesday = 20; $today = 'tuesday'; $price_for_today = ${ 'price_for_' . $today}; echo $price_for_today; // will return 20
Je fais cela assez souvent sur les résultats renvoyés par une requête.
par exemple
// $MyQueryResult is an array of results from a query foreach ($MyQueryResult as $key=>$value) { ${$key}=$value; }
Maintenant, je peux simplement utiliser $ MyFieldname (ce qui est plus facile dans les instructions echo, etc.) plutôt que $ MyQueryResult ['MyFieldname']
Oui, c'est probablement paresseux, mais je n'ai jamais eu de problèmes.
la source
Tom si vous avez un tableau existant, vous pouvez convertir ce tableau en objet et l'utiliser comme ceci:
$r = (object) $MyQueryResult; echo $r->key;
la source
J'ai une solution pour la valeur de variable créée dynamiquement et combiné toute la valeur dans une variable.
if($_SERVER['REQUEST_METHOD']=='POST'){ $r=0; for($i=1; $i<=4; $i++){ $a = $_POST['a'.$i]; $r .= $a; } echo $r; }
la source
J'étais dans une position où j'avais 6 tableaux identiques et je devais choisir le bon en fonction d'une autre variable, puis lui attribuer des valeurs. Dans le cas montré ici, $ comp_cat était 'a' donc je devais choisir mon tableau 'a' (j'avais aussi bien sûr des tableaux 'b' à 'f')
Notez que les valeurs de la position de la variable dans le tableau vont après l'accolade fermante.
la source
Essayez d'utiliser {} au lieu de ():
${"file".$i} = file($filelist[$i]);
la source