我正在尝试使用动态变量名称(我不确定它们的实际名称),但是非常像这样:
for($i=0; $i<=2; $i++) {
$("file" . $i) = file($filelist[$i]);
}
var_dump($file0);
回报是null
告诉我它不起作用。我不知道我在寻找什么语法或技术,这使得很难研究。$filelist
在前面定义。
我正在尝试使用动态变量名称(我不确定它们的实际名称),但是非常像这样:
for($i=0; $i<=2; $i++) {
$("file" . $i) = file($filelist[$i]);
}
var_dump($file0);
回报是null
告诉我它不起作用。我不知道我在寻找什么语法或技术,这使得很难研究。$filelist
在前面定义。
Answers:
将它们包装在{}
:
${"file" . $i} = file($filelist[$i]);
使用${}
是创建动态变量的一种方法,简单的示例:
${'a' . 'b'} = 'hello there';
echo $ab; // hello there
${'fixedTime$i'} = $row['timeInstance'];
给了您一个不是很有用的$fixedTime$i
替代品$fixedTime1, $fixedTime2
。(幸运的是,它几乎马上就被发现了。)
在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']()
尝试使用{}
代替()
:
${"file".$i} = file($filelist[$i]);
$price_for_monday = 10; $price_for_tuesday = 20; $today = 'tuesday'; $price_for_today = ${ 'price_for_' . $today}; echo $price_for_today; // will return 20
我经常对查询返回的结果进行此操作。
例如
// $MyQueryResult is an array of results from a query
foreach ($MyQueryResult as $key=>$value)
{
${$key}=$value;
}
现在我可以只使用$ MyFieldname(在echo语句等中更容易使用),而不是$ MyQueryResult ['MyFieldname']
是的,可能很懒,但是我从来没有遇到任何问题。
我当时有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];
尝试使用{}代替():
${"file".$i} = file($filelist[$i]);