PHP变量获取数组值

时间:2014-12-11 06:24:24

标签: php variable-variables

我正在构建一个条件检查,我在其中传递变量和要检查的值。在这种情况下,变量是一个数组值,但我不能让它正确返回

//happens somewhere else
$specialFeature['option1']="on";
$specialFeature['option2']="on";
$specialFeature['option3']="off";

//what I'm trying to do
#query a db
$row = $result->fetch_array()
#results for purpose of demo
#$row['var'] = "specialFeature['option2']";
#$row['val'] = "on";
if($$row['var'] == $row['val']){
    //what i'm expecting
    echo "OK";
}

我的问题是$$var始终为空。我究竟做错了什么?这可能吗?

6 个答案:

答案 0 :(得分:1)

//happens somewhere else
$ARRAY['myKey1']=1;
$ARRAY['myKey2']=2;
$ARRAY['myKey3']=3;

//what I'm trying to do
$var = "ARRAY['myKey3']";
$val = 3;
if(${$var} == $val){
    //what i'm expecting
    echo "OK";
}

来自PHP.net: 为了将变量变量与数组一起使用,您必须解决模糊问题。也就是说,如果你写$$ a [1],那么解析器需要知道你是否想要使用$ a [1]作为变量,或者你想要将$$作为变量,然后是[1]索引来自那个变量。解决这种歧义的语法是:第一种情况为$ {$ a [1]},第二种情况为$ {$ a} [1]。

编辑: 数组索引似乎是问题所在。

要分割变量名称,您可以使用类似

的内容
preg_match('/(.*)\[\'(.*)\'\]/', $row['var'], $matches);

答案 1 :(得分:1)

使用$$var,您会得到以下信息:${"ARRAY['myKey3']"},因此将其视为名为ARRAY['myKey3']的变量(虽然您可以使用{{1}创建它,但它不存在},但它将与$$var = 'new value'不同,因为它们将是2个不同的变量)。您可能正在寻找$ARRAY['myKey3']

答案 2 :(得分:1)

$ARRAY['myKey1']=1;
$ARRAY['myKey2']=2;
$ARRAY['myKey3']=3;

//what I'm trying to do
$var = "ARRAY";//pass variable name or array name
$val = 3;
if((${$var}['myKey3']) == $val){
    //what i'm expecting
    echo "OK";
}

答案 3 :(得分:0)

试试这个:

if(${$var} == $val){
    //what i'm expecting
    echo "OK";
}

答案 4 :(得分:0)

这就是你要找的东西吗?

    $var = $ARRAY['myKey3'];
    $val = 3;
     if($var == $val){
     //what i'm expecting
     echo "OK";
           }

答案 5 :(得分:0)

我不确定我所做的是"是否正确",但我得到了我正在寻找的结果:

//happens somewhere else
$specialFeature['option1']="on";
$specialFeature['option2']="on";
$specialFeature['option3']="off";

//what I'm trying to do
#query a db
$row = $result->fetch_array()
#results for purpose of demo
#$row['var'] = "specialFeature['option2']";
#$row['val'] = "on";

$var = $row['var'];

if (strpos($var,'[') !== false) {
    $varA = str_split($var,strpos($var,'['));
    $varA[1] = substr($varA[1],1,-1);
    if (strpos($varA[1],"'") !== false) {
        $varA[1] = substr($varA[1],1,-1);
    }
}

if(${$varA[0]}[$varA[1]] == $row['val']){
    //what i'm expecting
    echo "OK";
}