213

我正在尝试使用动态变量名(我不确定它们实际上叫什么)但很像这样:

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

var_dump($file0);

回报是null告诉我它不起作用。我不知道我在这里寻找的语法或技术是什么,这使得研究变得困难。$filelist前面已经定义了。

4

8 回答 8

564

将它们包裹在{}

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

工作示例


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

${'a' . 'b'} = 'hello there';
echo $ab; // hello there
于 2012-02-13T08:35:23.767 回答
97

概述

在 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']()
于 2016-03-03T12:43:24.060 回答
22

尝试使用{}而不是()

${"file".$i} = file($filelist[$i]);
于 2012-02-13T08:36:17.923 回答
6

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

例如

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

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

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

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

于 2013-01-16T06:03:13.077 回答
3

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

$r = (object) $MyQueryResult;
echo $r->key;
于 2013-05-30T19:14:11.160 回答
2

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

${"file".$i} = file($filelist[$i]);
于 2019-02-15T15:45:16.010 回答
1

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

if($_SERVER['REQUEST_METHOD']=='POST'){
    $r=0;
    for($i=1; $i<=4; $i++){
        $a = $_POST['a'.$i];
        $r .= $a;
    }
    echo $r;
}
于 2015-05-12T16:45:56.373 回答
0

我处于一个有 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;

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

于 2015-11-10T20:33:07.910 回答