Переменные PHP переменные получают значение массива

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";
if($$row['var'] == $row['val']){
    //what i'm expecting
    echo "OK";
}

Моя проблема: $$var всегда null. Что я делаю не так? Это возможно?

  • 0
    почему бы вам не попробовать вот так, просто позвоните как $ var = "$ ARRAY ['myKey3']";
  • 0
    $val == $ARRAY['myKey3']
Теги:
variable-variables

6 ответов

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

С $$var вы получаете следующее: ${"ARRAY['myKey3']"}, поэтому он рассматривается как переменная с именем ARRAY['myKey3'] (чего не существует, хотя вы можете создать его с помощью $$var = 'new value', но оно будет отличаться от $ARRAY['myKey3'] поскольку они будут представлять собой две разные переменные). Вероятно, вы ищете, if ($ARRAY['myKey3'] == $val)?

  • 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] в качестве переменной или если вы хотите $$ a как переменную, а затем индекс [1] из эта переменная. Синтаксис для устранения этой двусмысленности: $ {$ a [1]} для первого случая и $ {$ a} [1] для второго.

Изменение: кажется, что проблема с массивом.

Чтобы разделить имя переменной, вы можете использовать что-то вроде

preg_match('/(.*)\[\'(.*)\'\]/', $row['var'], $matches);
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";
}
0

Это то, что вы ищете?

    $var = $ARRAY['myKey3'];
    $val = 3;
     if($var == $val){
     //what i'm expecting
     echo "OK";
           }
  • 0
    И да, вы делаете что-то не так. Вы присваиваете значение условному блоку, $$ для присвоения значения, равного исходной переменной, но условие просто для проверки значения на его истинное или ложное, поскольку в этом случае $$ var равно NULL, поэтому условие не является истинным вот почему он ничего не возвращает. Просто посмотрите, что случилось с этим кодом var_dump ($$ var);
0

Попробуй это:

if(${$var} == $val){
    //what i'm expecting
    echo "OK";
}
  • 0
    Пытался безуспешно

Ещё вопросы

Сообщество Overcoder
Наверх
Меню