【问题标题】:how to change php variable name in a loop?如何在循环中更改php变量名?
【发布时间】:2011-09-08 06:10:14
【问题描述】:

假设我有一个名为 $file 的变量和 for 循环:for($i=1; $i <= 5; $i++) {}

对于 for 循环的每次迭代,$i 值将附加到 $file 变量名,因此在 for 循环结束后,我应该有五个变量:$file1$file2$file3$file4$file5

【问题讨论】:

  • 为什么要这样做?使用(关联)数组作为可移植命名空间几乎总是更好的解决方案。

标签: php variables loops for-loop


【解决方案1】:

可以做你想做的事,但动态创建变量似乎是解决此类问题的不寻常方法(我可能错了)

我建议将文件名存储在一个数组中,这样您以后可以轻松地遍历文件,或者添加一个额外的文件而不必更改任何硬编码的变量名

    $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";
    }

【讨论】:

    【解决方案2】:

    您也可以使用数组。它没有完全相同的效果,但我通常看到在这些情况下使用它。

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

    【讨论】:

      【解决方案3】:

      一种方法可以做到这一点:

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

      但这样做是一个坏主意。为什么这是个坏主意?因为这就是 arrays 的用途。改为这样做:

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

      (注意。通常的约定是从 0 而不是 1 开始数组键,但您不必这样做。)

      【讨论】:

        【解决方案4】:

        请参阅Variable Variables 上的 PHP 手册。

        $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

        【讨论】:

          【解决方案5】:

          使用${'varname'} syntax:

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

          但是,使用数组通常比使用数组更好。

          【讨论】:

          • @Yuri 非常感谢!即使在 2014 年,您的回答也在帮助人们!
          • 我正在做的事情的数组无济于事,我正在逐行制作一个文件,所以我有$line01="foo"....$line55="bar" 所以做这个变量变量方法似乎使对我来说最有意义,除非有更好的方法来逐行创建?所以。我如何在 01-09 上也有 0 填充?我想在 for 循环中有一个 if 语句,但有更好的方法吗?
          猜你喜欢
          • 1970-01-01
          • 2015-10-01
          • 2016-06-02
          • 2019-01-31
          • 1970-01-01
          • 1970-01-01
          • 2013-06-12
          • 1970-01-01
          相关资源
          最近更新 更多