在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];