【问题标题】:How to concatenate PHP variable name?如何连接PHP变量名?
【发布时间】:2012-07-29 05:26:26
【问题描述】:

我有一个 PHP for 循环:

for ($counter=0,$counter<=67,$counter++){

echo $counter;
$check="some value";

}

我想要实现的是使用 for 循环变量并将其附加到另一个变量的名称。

基本上,我希望每行的 PHP 输出如下所示

1
$check1="some value"

2
$check2="some value"

3
$check3="some value"

4
$check4="some value"

etc etc 

我尝试过$check.$counter="some value",但失败了。

我怎样才能做到这一点?我错过了什么明显的东西吗?

【问题讨论】:

  • 使用array 会比这种方法更可取吗? $myVar = array(); for($i = 0; $i &lt;= 67; $i++) { $myVar[] = "Some Value"; }

标签: php variables append concatenation


【解决方案1】:

variable variables 的正确语法是:

${"check" . $counter} = "some value";

但是,我强烈反对这样做。使用arrays 可以更优雅地解决您想要完成的任务。示例用法:

// Setting values
$check = array();
for ($counter = 0; $counter <= 67; $counter++){
    echo $counter;
    $check[] = "some value";
}

// Iterating through the values
foreach($check as $value) {
    echo $value;
}

【讨论】:

  • 谢谢蒂姆,是否存在可接受的情况或不再使用功能?
  • @Smudger:在我的脑海中,我想不出一个可以使用可变变量的可靠案例。查看comments on the documentation page 可能会给您一些关于它们在哪里有用的想法。请记住,您在那里阅读的内容可能不被视为最佳实践。
  • 串联从来都不是“更干净”的解决方案,但在某些情况下,您可能有旧的、高度开发的代码,这些代码从未打算关联 A+B,而这样做比重写要容易得多数百行代码只是为了用数组替换旧的变量类型
  • 我能想到的使用它们的一种情况是在 HTML 表单中递归构建输入。当您发布它时,它将作为一堆变量而不是一个数组发布;因此,使用 $_POST[${"myInputName".$i}] 递归调用它们可能会更容易
【解决方案2】:

一个数组可以完成这个。

$check = array();

for($counter = 0; $counter <= 67; $counter++) {
    $check[] = "some value";
    var_dump($check[$counter]);
}

【讨论】:

    【解决方案3】:

    你应该使用 ${'varname'} 语法:

    for ($counter=0,$counter<=67,$counter++){
        echo $counter;
        ${'check' . $counter} ="some value";
    }
    

    这可行,但为什么不直接使用数组呢?

    $check[$counter] = "some value";
    

    【讨论】:

      【解决方案4】:

      这在某些情况下是可用的。例如,如果您的应用在 DB 中有 2 个语言条目。

      echo $this->{'article_title_'.$language};
      

      这比例如这个更有用;

      if($language == 'mylanguage1')
          echo $this->article_title_mylanguage1;
      else
          echo $this->article_title_mylanguage2;
      

      显然,这是您在多语言应用程序中不应该做的事情,但我见过这样的案例。

      【讨论】:

      • 是的,这是我的情况:我在 DB 中有 3 列条目。所以我需要像这样从复选框组中循环
      猜你喜欢
      • 1970-01-01
      • 2017-08-21
      • 2017-08-22
      • 2023-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-27
      相关资源
      最近更新 更多