在 PHP 中使用动态变量名称

问题描述 投票:0回答:9

我正在尝试使用动态变量名称。所以在这个循环中我想创建

$file0
$file1
$file2
:

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

var_dump($file0);

返回的是

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

php variables
9个回答
593
投票

把它们包起来

{}

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

工作示例


使用

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

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

115
投票

概述

在 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']()

22
投票

尝试使用

{}
代替
()
:

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

8
投票

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

例如

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

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

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

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


3
投票

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

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

3
投票

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

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

1
投票

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

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

0
投票

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

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

${'comp_cat_'.$comp_cat.'_arr'}[1][0] = "弗雷德·博客";

${'comp_cat_'.$comp_cat.'_arr'}[1][1] = $file_tidy;

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


0
投票

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

$variableName= "field_".$id;
echo $_POST[$variableName];
© www.soinside.com 2019 - 2024. All rights reserved.