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

Я создаю проверку условия, где я передаю переменную и проверяемое значение. В этом случае переменная является значением массива, но я не могу заставить его вернуть его правильно

//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 всегда ноль. Что я делаю неправильно? Это возможно?

0

Решение

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

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

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

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

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

if(${$var} == $val){
//what i'm expecting
echo "OK";
}
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";
}
0
По вопросам рекламы [email protected]