2011-06-04 15 views
17

Digamos que tengo una variable llamada $ archivo y el bucle for: for($i=1; $i <= 5; $i++) {}cómo cambiar el nombre de la variable php en un bucle?

Para cada iteración del bucle, el valor $i se anexará a la $file nombre de la variable así que después de la de los extremos de bucle, que debería tener cinco variables: $file1, $file2, $file3, $file4 y $file5.

+4

¿Por qué desea hacer esto? Usar una matriz (asociativa) como un espacio de nombre portátil casi siempre es una mejor solución. –

Respuesta

55

Uso ${'varname'} syntax:

for($i=1; $i <= 5; $i++) { 
    ${'file' . $i} = $i; 
} 

Sin embargo, a menudo es mejor utilizar matrices en lugar de esto.

+0

+1, se olvidó de que puede hacer referencia con los refuerzos. –

+3

@Yuri ¡Muchas gracias! ¡Incluso en 2014 tu respuesta es ayudar a las personas! – sweaty

+1

Las matrices de lo que estoy haciendo no ayudarán, estoy haciendo un archivo línea por línea, así que tengo '$ line01 =" foo "' .... '$ line55 =" bar "' por lo que este método de variable variable parece para que tenga más sentido para mí, a menos que haya una mejor manera de crear la línea por líneas? Asi que. ¿cómo tengo el 0 relleno en 01-09 también? Supongo que una instrucción if dentro del ciclo for, pero ¿hay una mejor manera? –

1

Consulte el manual de PHP en Variable Variables.

$var_name = ''; 
for ($i = 0; $i < 5; $i++) 
{ 
    $var_name = 'file' . $i; 

    // reference $$var_name now. 
    $$var_name = 'foo'; 
} 

var_dump($file1); 
var_dump($file2); 
var_dump($file3); 
var_dump($file4); 
var_dump($file5); 

demo

9

Hay es una manera de hacer esto:

for($i = 1; $i <= 5; $i++) { 
    ${'file'.$i} = ...; 
} 

pero es una mala ideapara hacer esto. por qué es una mala idea? Porque esto es para lo que están destinados los conjuntos . Hacer esto en su lugar:

for($i = 1; $i <= 5; $i++) { 
    $file[$i] = ...; 
} 

(NB Es la convención usual para comenzar claves de matriz a 0 en lugar de 1, pero no tiene que hacerlo..)

+0

+1 Justo lo que iba a decir. –

1

Se puede utilizar asimismo una matriz . No tiene el mismo efecto exacto, pero generalmente es lo que veo que se usa en estas situaciones.

for($i=1; $i <= 5; $i++) { 
    $file[$i] = $i; 
} 
4

es posible hacer lo que quiera, pero la creación de las variables sobre la marcha parece una manera inusual para resolver un problema de este tipo (que podría ser mal)

Yo sugeriría almacenar los nombres de archivo en una matriz, de esa manera se puede recorrer fácilmente a través de los archivos más adelante, o añadir un archivo adicional y no tiene que cambiar los nombres de variables codificadas

0

Vea la sección Variable variables en el manual de PHP. Puede usar $$ para sus necesidades de esta manera:

<?php 
    $var_prefix = 'file'; 
    for($i=1; $i <= 5; $i++) { 
     $var_name = $var_prefix . $i; 
     $$var_name = 'Foo Bar Blah Baz ' . $i; 
    } 
    var_dump($file1, $file2, $file3, $file4, $file5); 
?> 
Cuestiones relacionadas