我可以从两个变量的值中创建一个变量的名称:
$a = 'tea';
$b = 'pot';
$tea_pot = 'Too Hot';
如果我打印或回显${$a.'_'.$b}
,我会将'太热'作为输出。
类似地,我需要从两个变量的值中创建一个数组的名称。 我试试下面的代码。但它给了我一个错误:未定义的变量。
我想要的东西:
$k = ${'B'.$a}
$a=5
和$B5 = array('c', 'v', 'b');
并希望echo($k[2])
;
我想解决的代码就在这里......
$B0 = array('apple', 'crow', 'monkey', 'lion', 'deer', 'bear', 'tiger');
$B1 = array('bad', 'meaningless', 'odd', 'no fare', 'poor', 'old', 'dirty', 'damn', 'rush');
function($set, $number){
while($set >= 2){
$set -= 2;
}
if($set == 0){
while($number >= 7){
$numbur -= 7;
}
} else {
while($number >= 9){
$numbur -= 9;
}
}
$array = ${'B'.$set}; // Error
return $array[$number];
}
/*Error: it is saying that here the "${'B'.$set}" is a Undefined variable
where it is a name of an array. what can I do to realize
that it is not a variable but an array.*/
答案 0 :(得分:2)
您想使用:
${$name}[$key]
在这种情况下${$a.'_'.$b}[$key]
这会将变量名称指定给数组的名称。
正如Juhana所说,使用多维数组确实更安全。而不是使用$B0
,为什么不使用:
$B[0] = array('apple', 'crow', 'monkey', 'lion', 'deer', 'bear', 'tiger');
$B[1] = array('bad', 'meaningless', 'odd', 'no fare', 'poor', 'old', 'dirty', 'rush');
然后你可以在你的函数中引用它,如下所示:
global $B[$set];
return $B[$set][$number];
它更干净。仅仅因为变量创建方法有效,并不意味着它是最好或最安全的方法。在您的情况下,它不是一个安全问题,因为您在B
之后附加变量名称。但是如果你没有这样做,并且你只是直接引用一个字符串用作变量名,那么你可能会遇到问题。
答案 1 :(得分:-1)
$array['tea']['pot'] = 'Too Hot';
echo $array[$a][$b];
答案 2 :(得分:-1)
这是一个 BAD 的想法,可以像其他几个人一样使用它。但如果你对它有强烈的感觉,那很简单:
$B5 = array('one', 'two', 'three');
$a = 5;
$k = 'B'.$a;
使用var_dump($$k);
即可获得
array(3) { [0]=> string(3) "one" [1]=> string(3) "two" [2]=> string(5) "three" }
要通过索引访问数组值,请使用:
echo ${$k}[0];
或通过另一个变量:
$another_var = $$k;
echo $another_var[0];
答案 3 :(得分:-2)
我遇到了真正的问题并解决了...... 这里的数组“B0”和“B1”是函数之外的位置,所以你必须在调用它之前在函数内部添加一行来将$ {'B'。$ set}声明为全局数组。像这样:
$B0 = array('apple', 'crow', 'monkey', 'lion', 'deer', 'bear', 'tiger');
$B1 = array('bad', 'meaningless', 'odd', 'no fare', 'poor', 'old', 'dirty', 'damn', 'rush');
function($set, $number){
while($set >= 2){
$set -= 2;
}
if($set == 0){
while($number >= 7){
$numbur -= 7;
}
} else {
while($number >= 9){
$numbur -= 9;
}
}
global ${'B'.$set};
$array = ${'B'.$set};
return $array[$number];
}
现在它将理解并将正确获取数组,并且不会显示任何错误。