我试图使用动态变量名称(我不确定它们实际上被称为什么),但大致如下:

for($i=0; $i<=2; $i++) {
    $("file" . $i) = file($filelist[$i]);
}

var_dump($file0);

返回值为null,说明它不起作用。我不知道我在这里寻找的语法或技术是什么,这使得研究起来很困难。$filelist在前面定义。


将它们包装在{}中:

${"file" . $i} = file($filelist[$i]);

工作示例


使用${}是一种创建动态变量的方法,简单的例子:

${'a' . 'b'} = 'hello there';
echo $ab; // hello there

试着用{}代替():

${"file".$i} = file($filelist[$i]);

我经常这样做从查询返回的结果..

e.g.

// $MyQueryResult is an array of results from a query

foreach ($MyQueryResult as $key=>$value)
{
   ${$key}=$value;
}

现在我可以只使用$MyFieldname(这是更容易在echo语句等)而不是$MyQueryResult['MyFieldname']

是的,这可能是懒惰,但我从来没有遇到过任何问题。


Tom,如果你有一个现有的数组,你可以将该数组转换为对象,并像这样使用它:

$r = (object) $MyQueryResult;
echo $r->key;

我有一个动态创建变量值的解决方案,并将所有值组合在一个变量中。

if($_SERVER['REQUEST_METHOD']=='POST'){
    $r=0;
    for($i=1; $i<=4; $i++){
        $a = $_POST['a'.$i];
        $r .= $a;
    }
    echo $r;
}

我有6个相同的数组,我需要根据另一个变量选择正确的一个,然后给它赋值。在这里显示的情况下$comp_cat是'a'所以我需要选择我的'a'数组(我当然也有'b'到'f'数组)

注意,变量在数组中的位置值位于右大括号之后。

$ {comp_cat_。comp_cat美元。'_arr'}[1][0] = "FRED BLOGGS"; $ {comp_cat_。comp_cat美元。'_arr'}[1][1] = $file_tidy; $comp_cat_a_arr[1][0]. echo '第一个数组值是'。',第二个值是。$comp_cat_a_arr[1][1];


概述

在PHP中,你可以在变量前面加一个额外的$,使它成为一个动态变量:

$$variableName = $value;

虽然我不建议这样做,但你甚至可以连锁这种行为:

$$$$$$$$DoNotTryThisAtHomeKids = $value;

你可以但不强制将$variableName放在{}之间:

${$variableName} = $value;

只有当你的变量名本身是多个值的组合时,使用{}是强制性的,就像这样:

${$variableNamePart1 . $variableNamePart2} = $value;

尽管如此,还是建议始终使用{},因为它更具可读性。

PHP5和PHP7的区别

总是使用{}的另一个原因是PHP5和PHP7处理动态变量的方式略有不同,这在某些情况下会导致不同的结果。

在PHP7中,动态变量、属性和方法将严格按照从左到右的顺序求值,这与PHP5中混合的特殊情况不同。下面的示例显示了求值顺序的变化。

案例1:$$foo['bar']['baz']

PHP5解释:${$foo['bar']['baz']} PHP7解释:${$foo}['bar']['baz']

用例2:$foo->$bar['baz']

PHP5解释:$foo->{$bar['baz']} PHP7解释:$foo->{$bar}['baz']

案例3:$foo->$bar['baz']()

PHP5解释:$foo->{$bar['baz']}() PHP7解释:$foo->{$bar}['baz']()

案例4:Foo::$bar['baz']()

PHP5解释:Foo::{$bar['baz']}() PHP7解释:Foo::{$bar}['baz']()


试着用{}代替():

${"file".$i} = file($filelist[$i]);

在尝试了上面提到的所有方法之后,它的工作方式很简单: 它作为$_POST变量访问,因为它直接来自动态表单。

$variableName= "field_".$id;
echo $_POST[$variableName];