在PHP中使用带动态变量名的大括号


Using braces with dynamic variable names in PHP

我正在尝试使用动态变量名(我不确定它们的实际名称),但很像这样:

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

概述

在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]);

我经常对查询返回的结果执行此操作。。

例如

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

尝试使用{}而不是():

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

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

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]=$file_tidy;

echo"第一个数组值为"$comp_cat_a_arr[1][0]。'第二个值为$comp_cat_a_arr[1][1];

在尝试了上述所有操作后,它以简单的方式工作:它作为$_POST变量访问,因为它直接来自动态表单

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