如何连接PHP变量名?

23

我有一个 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 <= 67; $i++) { $myVar[] = "Some Value"; } - Matt
4个回答

75

变量变量的正确语法是:

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

不过,我强烈不建议这样做。你尝试实现的目标很可能可以通过使用数组更加优美地解决。示例用法:

// 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;
}

谢谢Tim,这种情况是否可接受或者说这个功能已经不再使用了? - Smudger
1
@Smudger:就我个人而言,我无法想到一个稳定的情况下会使用可变变量。查看文档页面上的评论可能会为您提供一些有用的思路。但请记住,您所阅读的内容可能并不被视为最佳实践。 - user142162
连接并不是“更干净”的解决方案,但有些情况下,你可能有一些旧的、高度开发的代码,它从未打算将A+B相关联,这时候直接连接可能比重写数百行代码来替换旧变量类型为数组要容易得多。 - Nosajimiki
我能想到唯一需要使用它们的情况是在HTML表单中,当我递归构建输入时。当您提交表单时,它将作为一堆变量而不是数组进行提交;因此,使用$_POST[${"myInputName".$i}]进行递归调用可能更容易。 - Nosajimiki

6
您应该使用${'varname'}语法:
for ($counter=0,$counter<=67,$counter++){
    echo $counter;
    ${'check' . $counter} ="some value";
}

这样做可以实现功能,但为什么不直接使用数组呢?
$check[$counter] = "some value";

6

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

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

这比例如下的方式更易用;
if($language == 'mylanguage1')
    echo $this->article_title_mylanguage1;
else
    echo $this->article_title_mylanguage2;

很明显,在您的多语言应用程序中不应该这样做,但我见过这样的情况。

是的,这是我的情况:我在数据库中有3列条目。因此,我需要从复选框组循环执行以下操作。 - Pathros

0

一个数组可以实现这个功能。

$check = array();

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接