Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP中使用带动态变量名的大括号_Php_Variables_Dynamic_Dynamic Variables - Fatal编程技术网

在PHP中使用带动态变量名的大括号

在PHP中使用带动态变量名的大括号,php,variables,dynamic,dynamic-variables,Php,Variables,Dynamic,Dynamic Variables,我尝试使用动态变量名(我不确定它们的实际名称),但大致如下: for($i=0; $i<=2; $i++) { $("file" . $i) = file($filelist[$i]); } var_dump($file0); $r = (object) $MyQueryResult; echo $r->key; 对于($i=0;$i将它们包装在{}中: ${"file" . $i} = file($filelist[$i]); 使用${}是创建动态变量的一种方法,

我尝试使用动态变量名(我不确定它们的实际名称),但大致如下:

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

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

对于($i=0;$i将它们包装在
{}
中:

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

使用
${}
是创建动态变量的一种方法,简单示例如下:

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

尝试使用
{}
而不是
()


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

e、 g

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


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

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

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

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

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

if($_SERVER['REQUEST_METHOD']=='POST'){
    $r=0;
    for($i=1; $i<=4; $i++){
        $a = $_POST['a'.$i];
        $r .= $a;
    }
    echo $r;
}
if($\u服务器['REQUEST\u METHOD']=='POST'){
$r=0;

对于($i=1;$i我有6个相同的数组,我需要根据另一个变量选择正确的数组,然后给它赋值。在这里显示的例子中,$comp_cat是'a',所以我需要选择我的'a'数组(当然我也有'b'到'f'数组)

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

${'comp_cat'.$comp_cat.''u arr'}[1][0]=“FRED BLOGGS”

${'comp_cat.'$comp_cat.''u arr'}[1][1]=$file_tidy

echo“第一个数组值为“$comp_cat_a_arr[1][0]”,第二个值为“$comp_cat_a_arr[1][1]”

概述 在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']()
尝试使用{}而不是():


不要!从来没有好的理由使用它们。实际上,它们只是一个不整洁的数组。请改用一个合适的数组。好吧,对不起,我只是回去为我迄今为止提出的每个问题选择了一个答案。好的是,现在只有7个:PAnd Quentin,为什么它们是不好的做法?它们与数组共存一定有原因think@user1159454-它们是一团混乱,没有所有可用于阵列的工具。它们的存在是因为古老的遗留原因和疯狂的边缘案例。疯狂的边缘案例可能正是有人想问这个问题的原因。是否也可以创建具有相同逻辑的动态阵列?我对@dtakis有同样的怀疑,可以吗你能帮助我们吗?如果可能的话,请看一看。如果你用它来包含一个变量(我认为这是最有用的方法),请不要忘记使用双引号。
${'fixedTime$i'}=$row['timeInstance'];
给你一个不是很有用的
$fixedTime$i
而不是
$fixedTime1,$fixedTime2
等等。(幸运的是,你几乎马上就发现了它。)你有没有尝试过使用PHP的extract()函数?DB结果集的一个简单的线性函数:foreach($k=>$v的行){$$k=$v}对于一个可疑的主题,这是一个很好的答案。我真的很高兴我不必调试这样的代码。最好的答案,因为它只是回答了问题而没有进行判断。是的,我们只是在一些遗留代码上遇到了一些问题。生产是PHP5.5,开发环境是PHP7。我喜欢这个问题。来自phpNET手册
$price\u for_monday=10;$price_for_星期二=20;$today='星期二';$price_for_今天=${'price_for_'.$today};echo$price_for_今天;//将返回20
${"file".$i} = file($filelist[$i]);