获取数组值的 PHP 变量变量

PHP variable variables getting array value

提问人:KPK 提问时间:12/11/2014 最后编辑:KPK 更新时间:12/11/2014 访问量:727

问:

我正在构建一个条件检查,我传入了变量和一个要检查的值。在这种情况下,变量是一个数组值,但我无法让它正确返回它

//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

php 变量

评论

0赞 Vignesh Pichamani 12/11/2014
你为什么不试试这个,简单地调用 $var = “$ARRAY['myKey3']”;
0赞 sectus 12/11/2014
$val == $ARRAY['myKey3']

答:

0赞 Mysteryos 12/11/2014 #1

试试这个:

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

评论

0赞 KPK 12/11/2014
尝试过,但没有成功
1赞 RST 12/11/2014 #2
//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] 作为变量,或者你是否希望 $$a 作为变量,然后是该变量的 [1] 索引。解决这种歧义的语法是:第一种情况为 ${$a[1]},第二种情况为 ${$a}[1]。

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

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

preg_match('/(.*)\[\'(.*)\'\]/', $row['var'], $matches);
0赞 monirz 12/11/2014 #3

这就是你要找的吗?

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

评论

0赞 monirz 12/11/2014
是的,你做错了什么。您正在为条件块分配一个值,$$ 用于分配一个等于原始变量的值,但条件仅用于检查其值为 true 或 false,因为在这种情况下 $$var 为 NULL,因此条件不为 true,这就是为什么它不返回任何内容。看看这个代码发生了什么 var_dump($$var);
1赞 Zudwa 12/11/2014 #4

随着您的关注:,因此它被视为具有名称的变量(不存在,尽管您可以使用 创建它,但它会有所不同,因为它们将是 2 个不同的变量)。可能您正在寻找?$$var${"ARRAY['myKey3']"}ARRAY['myKey3']$$var = 'new value'$ARRAY['myKey3']if ($ARRAY['myKey3'] == $val)

评论

0赞 KPK 12/11/2014
谢谢你的解释。这让我走上了正确的道路。
1赞 user3510665 12/11/2014 #5
$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";
}
0赞 KPK 12/11/2014 #6

我不确定我所做的是否“正确”,但我通过这样做得到了我想要的结果:

//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";
}