tabla - Usar llaves con nombres dinámicos de variables en PHP
mostrar datos de mysql en php en una tabla html (7)
Visión de conjunto
En PHP, puedes poner $
extra frente a una variable para convertirla en una variable dinámica:
$$variableName = $value;
Si bien no lo recomendaría, incluso podrías encadenar este comportamiento:
$$$$$$$$DoNotTryThisAtHomeKids = $value;
Puedes pero no estás obligado a poner $variableName
entre {}
:
${$variableName} = $value;
El uso de {}
solo es obligatorio cuando el nombre de la variable es en sí mismo una composición de valores múltiples, como esta:
${$variableNamePart1 . $variableNamePart2} = $value;
Sin embargo, se recomienda usar siempre {}
, porque es más legible.
Diferencias entre PHP5 y PHP7
Otra razón para usar {}
siempre es que PHP5 y PHP7 tienen una forma ligeramente diferente de tratar con variables dinámicas, lo que da como resultado un resultado diferente en algunos casos.
En PHP7, las variables dinámicas, las propiedades y los métodos se evaluarán estrictamente en orden de izquierda a derecha, a diferencia de la combinación de casos especiales en PHP5. Los ejemplos a continuación muestran cómo ha cambiado el orden de evaluación.
Caso 1: $$foo[''bar''][''baz'']
- Interpetación PHP5:
${$foo[''bar''][''baz'']}
- Interpetación de PHP7:
${$foo}[''bar''][''baz'']
Caso 2: $foo->$bar[''baz'']
- Interpetación PHP5:
$foo->{$bar[''baz'']}
- Interpetación de PHP7:
$foo->{$bar}[''baz'']
Caso 3: $foo->$bar[''baz'']()
- Interpetación PHP5:
$foo->{$bar[''baz'']}()
- Interpetación de PHP7:
$foo->{$bar}[''baz'']()
Caso 4: Foo::$bar[''baz'']()
- Interpetación PHP5:
Foo::{$bar[''baz'']}()
- Interpetación de PHP7:
Foo::{$bar}[''baz'']()
Intento utilizar nombres dinámicos de variables (no estoy seguro de cómo se llaman en realidad) Pero más o menos así:
for($i=0; $i<=2; $i++) {
$("file" . $i) = file($filelist[$i]);
}
var_dump($file0);
El retorno es null
que me dice que no está funcionando. No tengo idea de cuál es la sintaxis o la técnica que estoy buscando aquí, lo que hace que sea difícil investigar. $filelist
se define anteriormente.
Envuélvalos en {}
:
${"file" . $i} = file($filelist[$i]);
Ejemplo de trabajo
Usar ${}
es una forma de crear variables dinámicas, ejemplo simple:
${''a'' . ''b''} = ''hello there'';
echo $ab; // hello there
Estaba en una posición en la que tenía 6 matrices idénticas y necesitaba elegir la correcta dependiendo de otra variable y luego asignarle valores. En el caso que se muestra aquí, $ comp_cat era ''a'', así que tuve que elegir mi matriz ''a'' (también tuve, por supuesto, arrays ''b'' a ''f'')
Tenga en cuenta que los valores para la posición de la variable en la matriz van después de la llave de cierre.
$ {''comp_cat _''. $ comp_cat .''_ arr ''} [1] [0] = "FRED BLOGGS";
$ {''comp_cat _''. $ comp_cat .''_ arr ''} [1] [1] = $ file_tidy;
echo ''Primer valor de matriz es''. $ comp_cat_a_arr [1] [0]. '' y el segundo valor es. $ comp_cat_a_arr [1] [1];
Intenta usar {}
lugar de ()
:
${"file".$i} = file($filelist[$i]);
Lo hago con bastante frecuencia en los resultados devueltos por una consulta.
p.ej
// $MyQueryResult is an array of results from a query
foreach ($MyQueryResult as $key=>$value)
{
${$key}=$value;
}
Ahora puedo usar $ MyFieldname (que es más fácil en las declaraciones de eco, etc.) en lugar de $ MyQueryResult [''MyFieldname'']
Sí, probablemente sea flojo, pero nunca he tenido ningún problema.
Tom, si tienes una matriz existente, puedes convertir la matriz en objeto y usarla así:
$r = (object) $MyQueryResult;
echo $r->key;
tengo una solución para el valor de variable creado dinámicamente y combiné todo el valor en una variable.
if($_SERVER[''REQUEST_METHOD'']==''POST''){
$r=0;
for($i=1; $i<=4; $i++){
$a = $_POST[''a''.$i];
$r .= $a;
}
echo $r;
}