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

twh00eeo  于 2021-06-19  发布在  Mysql
关注(0)|答案(8)|浏览(589)

我尝试使用动态变量名(我不知道它们实际上叫什么),但大致是这样的:

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

var_dump($file0);

回报是 null 这说明它不起作用。我不知道我要找的语法或技术是什么,这使得研究起来很困难。 $filelist 已在前面定义。

5tmbdcev

5tmbdcev1#

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

// $MyQueryResult is an array of results from a query

foreach ($MyQueryResult as $key=>$value)
{
   ${$key}=$value;
}

现在我可以只使用$myfieldname(这在echo语句等中更容易)而不是$myqueryresult['myfieldname']
是的,这可能是懒惰,但我从来没有任何问题。

lsmepo6l

lsmepo6l2#

尝试使用 {} 而不是 () :

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

nqwrtyyt3#

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

if($_SERVER['REQUEST_METHOD']=='POST'){
    $r=0;
    for($i=1; $i<=4; $i++){
        $a = $_POST['a'.$i];
        $r .= $a;
    }
    echo $r;
}
fcy6dtqo

fcy6dtqo4#

概述

在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']()

xhv8bpkk

xhv8bpkk5#

尝试使用{}而不是():

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

chy5wohz6#

tom如果已有数组,则可以将该数组转换为对象并按如下方式使用:

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

iswrvxsc7#

把它们包起来 {} :

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

工作示例

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

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

lvjbypge8#

我有6个相同的数组,我需要根据另一个变量选择正确的数组,然后给它赋值。在这里显示的例子中,$comp\u cat是'a',所以我需要选择我的'a'数组(当然我还有'b'到'f'数组)
请注意,数组中变量位置的值位于右大括号之后。
${'comp\u cat.'.$comp\u cat.'\u arr'}[1][0]=“弗雷德·布洛格斯”;
${'comp\u cat.'.$comp\u cat.'\u arr'}[1][1]=$file\u tidy;
echo'第一个数组值是'.$comp_cat_a_arr[1][0].',第二个值是'.$comp_cat_a_arr[1][1];

相关问题