让我们说我有一个字符串数组,用于创建变量:
$var_arr = ["item1", "item2", "item3"];
foreach ($var_arr as $item) {
$$item = array();
}
然后我的代码中的其他地方我必须根据不同的数据源重新创建变量变量:
$user_input = [ "prod1" => "widget", "qty1" => 3, "prod2" => "thingy", "qty2" => 1, "prod3" => "dingus", "qty3" => 7 ];
foreach ($user_input as $key => $value) {
$a = "item" . substr($key, -1);
array_push($$a, $value);
}
$$ item和$$是一个相同的变量,还是它们引用了不同的内存块?
答案 0 :(得分:1)
两者都是相同的,你需要考虑的是你只是通过每个作业引用一个变量:
<?php
$hello ="hello in variable";
$array_hello = ["hello","Yellow"];
$hello_var = "hello";
$item = $array_hello[0];
echo $$hello_var;
echo $$item; //result same as above result
?>
这里要注意的一点是${$variable_name_string}
只是使用$variable_name_string
来知道你想要的变量的名称,所以两者都将访问相同的内存块,因为你在这里引用了相同的变量。
这里需要注意的另一件事是PHP 7中PHP 5的解释变化
表达式$$foo['bar']['baz']
PHP 5将其解释为${$foo['bar']['baz']}
,而PHP 7将其解释为($$foo)['bar']['baz']
Refer PHP manual for more