从两个变量的值中创建一个数组名称

时间:2012-03-25 19:14:18

标签: php arrays variables

我可以从两个变量的值中创建一个变量的名称:

$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.*/

4 个答案:

答案 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];
}

现在它将理解并将正确获取数组,并且不会显示任何错误。