2014-12-11 2 views
0

Я строю проверку состояния, где я передаю переменную и значение для проверки. В этом случае переменная будет массив, но я не могу получить его, чтобы вернуть его правильно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']"; –

+0

'$ val == $ ARRAY ['myKey3']' – sectus

ответ

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

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

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

Пробовал это без успеха – KPK

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); 
0

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

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

И да, вы делаете что-то не так. Вы присваиваете значение блоку условий $$ для присвоения значения, которое равно исходной переменной, но условие только для проверки значения true или false, поскольку в этом случае $$ var имеет значение NULL, поэтому условие не соответствует действительности поэтому его ничего не возвращает. Посмотрите, что произошло с этим кодом var_dump ($$ var); – monir009

1

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

+0

Спасибо за объяснение. Это поставило меня на правильный путь. – KPK

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

 Смежные вопросы

  • Нет связанных вопросов^_^