我正在尝试使用动态变量名称(我不确定它们实际上是什么名称)但是非常像这样:
for($i=0; $i<=2; $i++) {
$("file" . $i) = file($filelist[$i]);
}
var_dump($file0);
返回null
,告诉我它不起作用。我不知道我正在寻找的语法或技术是什么,这使得研究变得困难。 $filelist
之前已定义。
答案 0 :(得分:460)
将它们包裹在{}
:
${"file" . $i} = file($filelist[$i]);
使用${}
是一种创建动态变量的方法,简单示例:
${'a' . 'b'} = 'hello there';
echo $ab; // hello there
答案 1 :(得分:69)
在PHP中,您可以在变量前添加额外的$
以使其成为动态变量:
$$variableName = $value;
虽然我不推荐它,但你甚至可以链接这种行为:
$$$$$$$$DoNotTryThisAtHomeKids = $value;
您可以但不必强制将$variableName
放在{}
:
${$variableName} = $value;
仅当变量名称本身是多个值的组合时才使用{}
,如下所示:
${$variableNamePart1 . $variableNamePart2} = $value;
但建议始终使用{}
,因为它更具可读性。
始终使用{}
的另一个原因是,PHP5和PHP7处理动态变量的方式略有不同,在某些情况下会导致不同的结果。
在PHP7中,动态变量,属性和方法现在将严格按照从左到右的顺序进行评估,而不是PHP5中特殊情况的混合。以下示例显示了评估顺序的变化情况。
$$foo['bar']['baz']
${$foo['bar']['baz']}
${$foo}['bar']['baz']
$foo->$bar['baz']
$foo->{$bar['baz']}
$foo->{$bar}['baz']
$foo->$bar['baz']()
$foo->{$bar['baz']}()
$foo->{$bar}['baz']()
Foo::$bar['baz']()
Foo::{$bar['baz']}()
Foo::{$bar}['baz']()
答案 2 :(得分:20)
尝试使用{}
代替()
:
${"file".$i} = file($filelist[$i]);
答案 3 :(得分:4)
我经常在查询返回的结果中这样做。
e.g。
// $MyQueryResult is an array of results from a query
foreach ($MyQueryResult as $key=>$value)
{
${$key}=$value;
}
现在我可以使用$ MyFieldname(这在echo语句中比较容易)而不是$ MyQueryResult ['MyFieldname']
是的,它可能很懒,但我从来没有遇到任何问题。答案 4 :(得分:2)
Tom如果你有现有的数组,你可以将该数组转换为object并使用它:
$r = (object) $MyQueryResult;
echo $r->key;
答案 5 :(得分:0)
我有一个动态创建变量值的解决方案,并将所有值组合在一个变量中。
if($_SERVER['REQUEST_METHOD']=='POST'){
$r=0;
for($i=1; $i<=4; $i++){
$a = $_POST['a'.$i];
$r .= $a;
}
echo $r;
}
答案 6 :(得分: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];
答案 7 :(得分:0)
尝试使用{}代替():
reload