在PHP中使用带有dynamicvariables名称的大括号
我试图使用dynamicvariables名称(我不知道他们实际上叫什么)但是非常像这样:
for($i=0; $i<=2; $i++) { $("file" . $i) = file($filelist[$i]); } var_dump($file0);
返回值为null
,告诉我它不工作。 我不知道我在找什么样的语法或技巧,这很难研究。 $filelist
是在之前定义的。
用{}
包裹起来:
${"file" . $i} = file($filelist[$i]);
工作示例
使用${}
是创builddynamicvariables的一种方法,简单的例子是:
${'a' . 'b'} = 'hello there'; echo $ab; // hello there
概观
在PHP中,您可以在variables的前面添加一个$
,使其成为一个dynamicvariables:
$$variableName = $value;
虽然我不会推荐它,但你甚至可以链接这个行为:
$$$$$$$$DoNotTryThisAtHomeKids = $value;
你可以但不是强制在{}
之间放置$variableName
:
${$variableName} = $value;
使用{}
仅当variables的名称本身是多个值的组合时才是必需的,如下所示:
${$variableNamePart1 . $variableNamePart2} = $value;
不过build议始终使用{}
,因为它更具可读性。
PHP5和PHP7的区别
总是使用{}
另一个原因是,PHP5和PHP7处理dynamicvariables的方式略有不同,在某些情况下会导致不同的结果。
在PHP7中,dynamicvariables,属性和方法现在将按照从左到右的顺序进行严格评估,而不是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']
是的,这可能是懒惰的,但我从来没有遇到任何问题。
汤姆,如果你有现有的数组,你可以将该数组转换为对象,并像这样使用它:
$r = (object) $MyQueryResult; echo $r->key;
我有一个dynamic创build的variables值的解决scheme,并结合在一个variables中的所有值。
if($_SERVER['REQUEST_METHOD']=='POST'){ $r=0; for($i=1; $i<=4; $i++){ $a = $_POST['a'.$i]; $r .= $a; } echo $r; }
我在一个位置,我有6个相同的数组,我需要根据另一个variablesselect正确的,然后分配值。 在这里显示的情况下,$ comp_cat是'a',所以我需要select我的'a'数组(我当然也有'b'到'f'数组)
请注意,数组中variables位置的值位于右大括号之后。
$ {'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];