如何将字符串引用转换为变量

时间:2012-07-18 13:03:20

标签: php mysql

我希望$masking_x充当$masking_y(即动态插入$radiovalue,但仍然充当变种)。

我的代码是

while($field_radio = mysql_fetch_assoc($result_radio)) {
    $radiovalue = $field_radio[radiovalue];
    echo "Radio value: ".$radiovalue."</br>";   
    $masking = "field_masking[checkbox_1001_".$radiovalue."]";
    $masking_x = '$'.$masking;
    $masking_y = "$field_masking[checkbox_1001_2]";
    echo "Masking: ".$masking."</br>";
    echo "Masking_x: ".$masking_x."</br>";
    echo "Masking_y: ".$masking_y."</br>";
    die;

我得到以下输出:

Radio value: 2
Masking: field_masking[checkbox_1001_2]
Masking_x: $field_masking[checkbox_1001_2]
Masking_y: 2

非常感谢任何指导。提前谢谢。

3 个答案:

答案 0 :(得分:2)

您使用variable variables稍有不妥。试试这个:

$radiovalue = $field_radio['radiovalue'];
echo "Radio value: ".$radiovalue."</br>";   
$masking_x = "field_masking['checkbox_1001_".$radiovalue."']";
$masking_y = "field_masking['checkbox_1001_2']";
echo "Masking_x: ".$$masking_x."</br>";
echo "Masking_y: ".$$masking_y."</br>";

双美元符号必须在代码中,而不是在字符串中。

也可以这样做:

$radiovalue = $field_radio['radiovalue'];
echo "Radio value: ".$radiovalue."</br>";   
echo "Masking_x: ".${"field_masking['checkbox_1001_".$radiovalue."']"}."</br>";
echo "Masking_y: ".${"field_masking['checkbox_1001_2']"}."</br>";

另请注意,我在字符串中添加单引号以正确引用用于数组键的字符串,关联数组键这些是常规字符串,应该这样引用。

然而重要的是要注意变量变量很少是解决给定问题的正确方法。通常可以使用arraysreferences更好地提出更好的内容。

修改

在使用它之后,当键定义在字符串中时,似乎不能使用变量变量来引用数组键。这是一件非常可怕的事情,我并不感到惊讶,我从未遇到过这种限制。

缺点是你无法完全按照自己的意愿去做,而最好的解决方案可能就是使用引用:

$radiovalue = $field_radio['radiovalue'];
echo "Radio value: ".$radiovalue."</br>";   
$masking = &$field_masking['checkbox_1001_'.$radiovalue];
echo "Masking: ".$masking."</br>";
$masking = "A different value";
echo "Masking: ".$masking."</br>";
// Original value has been updated as well
echo "\$field_masking['checkbox_1001_'.\$radiovalue]: ".$field_masking['checkbox_1001_'.$radiovalue]."</br>";

答案 1 :(得分:1)

如果要动态访问数组变量,请将其拆分为两部分,单个变量无法正常工作。

$name = 'field_masking';
$key = 'checkbox_1001_'.$radiovalue;

echo $$name[$key];

答案 2 :(得分:0)

看看variable variables。请注意,如果您正在处理用户输入,则存在潜在的安全风险。

在您的情况下:$masking_x = $$masking;