how to change php variable name in a loop?

52,282

Solution 1

Use ${'varname'} syntax:

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

However, it's often better to use arrays instead of this.

Solution 2

There is a way to do this:

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

But it is a bad idea to do this. Why is it a bad idea? Because this is what arrays are meant for. Do this instead:

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

(NB. It is the usual convention to start array keys at 0 rather than 1, but you do not have to do so.)

Solution 3

it is possible to do what you want, but creating variables on the fly seems an unusual way to solve a problem like this (i could be wrong)

I would suggest storing the filenames in an array, that way you can easily iterate over the files later on, or add an extra file and not have to change any hardcoded variable names

    $myfiles = array();

    for ($i=1; $i<=5; $i++) {
       $myfiles["file$i"] = "value set in loop";
    }

    //if you want to use the values later
    $file5_value = $myfiles["file5"];

    //if you want to loop through them all
    foreach ($myfiles as $key => $val) {
      echo "$key -> $val\n";
    }

Solution 4

You can use an array as well. It doesn't have the same exact affect, but it is generally what I see used in these situations.

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

Solution 5

See PHP's manual on 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

Share:
52,282
user701510
Author by

user701510

Updated on August 11, 2020

Comments

  • user701510
    user701510 almost 4 years

    Lets say I have a variable called $file and the for loop: for($i=1; $i <= 5; $i++) {}

    For each iteration of the for loop, the $i value will be appended to the $file variable name so after the for loop ends, I should have five variables: $file1, $file2, $file3, $file4, and $file5.