J'essaie d'utiliser des noms de variables dynamiques (je ne sais pas comment ils s'appellent), mais à peu près comme ceci:
for($i=0; $i<=2; $i++) {
$("file" . $i) = file($filelist[$i]);
}
var_dump($file0);
Le retour est null
qui me dit que cela ne fonctionne pas. Je ne sais pas du tout quelle est la syntaxe ou la technique que je cherche, ce qui rend la recherche difficile. $filelist
est défini plus tôt.
Enveloppez-les dans {}
:
${"file" . $i} = file($filelist[$i]);
Utiliser ${}
est un moyen de créer des variables dynamiques, exemple simple:
${'a' . 'b'} = 'hello there';
echo $ab; // hello there
En PHP, vous pouvez simplement mettre un $
supplémentaire devant une variable pour en faire une variable dynamique:
$$variableName = $value;
Bien que je ne le recommande pas, vous pouvez même enchaîner ce comportement:
$$$$$$$$DoNotTryThisAtHomeKids = $value;
Vous pouvez mais n'êtes pas obligé de mettre $variableName
entre {}
:
${$variableName} = $value;
L'utilisation de {}
n'est obligatoire que lorsque le nom de votre variable est lui-même une composition de plusieurs valeurs, comme ceci:
${$variableNamePart1 . $variableNamePart2} = $value;
Il est néanmoins recommandé de toujours utiliser {}
, car il est plus lisible.
Une autre raison de toujours utiliser {}
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 maintenant évaluées strictement dans un ordre de gauche à droite, par opposition à la combinaison de cas spéciaux en PHP5. Les exemples ci-dessous montrent comment l'ordre d'évaluation a changé.
$$foo['bar']['baz']
${$foo['bar']['baz']}
${$foo}['bar']['baz']
$foo->$bar['baz']
$foo->{$bar['baz']}
$foo->{$bar}['baz']
$foo->$bar['baz']()
$foo->{$bar['baz']}()
$foo->{$bar}['baz']()
Foo::$bar['baz']()
Foo::{$bar['baz']}()
Foo::{$bar}['baz']()
Essayez d'utiliser {}
au lieu de ()
:
${"file".$i} = file($filelist[$i]);
Je le fais 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.
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;
Essayez d’utiliser {} au lieu de ():
${"file".$i} = file($filelist[$i]);
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 présenté ici, $ comp_cat était 'a' donc j’avais besoin de choisir mon tableau 'a'
Notez que les valeurs pour la position de la variable dans le tableau vont après l'accolade de fermeture.
$ {'comp_cat _'. $ comp_cat .'_ arr '} [1] [0] = "FRED BLOGGS";
$ {'comp_cat _'. $ comp_cat .'_ arr '} [1] [1] = $ file_tidy;
echo 'La première valeur du tableau est'. $ comp_cat_a_arr [1] [0]. ' et la deuxième valeur est. $ comp_cat_a_arr [1] [1];
j'ai une solution pour la valeur de variable créée dynamiquement et combinée toutes les valeurs dans une variable.
if($_SERVER['REQUEST_METHOD']=='POST'){
$r=0;
for($i=1; $i<=4; $i++){
$a = $_POST['a'.$i];
$r .= $a;
}
echo $r;
}