2009-09-15 2 views
0

У меня есть десять переменных, но нужно установить, но мне нужно проверить каждое из значений до тех пор, пока они не будут установлены. Я делаю инструкцию SWITCH/CASE, но я не уверен, что это лучший подход, потому что я не вижу, как я могу вернуть только переменную, которая мне нужна.return variable approach

$passed_var = 'A'; // Static 

$var_array = getSelectedVar($passed_var); 

foreach($var_array as $key => $val) { 
    echo "Key: " . $key . " VALUE: " . $val . "<br />\n"; 
} 

// How do I assign one of these values? 
if(isset($var_1)) { 
    echo "Var 1 Set<br />\n"; 
} elseif(isset($var_2)) { 
    echo "Var 2 Set<br />\n"; 
} elseif(isset($var_3)) { 
    echo "Var 3 Set<br />\n"; 
} elseif(isset($var_4)) { 
    echo "Var 4 Set<br />\n"; 
} elseif(isset($var_5)) { 
    echo "Var 5 Set<br />\n"; 
} elseif(isset($var_6)) { 
    echo "Var 6 Set<br />\n"; 
} elseif(isset($var_7)) { 
    echo "Var 7 Set<br />\n"; 
} elseif(isset($var_8)) { 
    echo "Var 8 Set<br />\n"; 
} elseif(isset($var_9)) { 
    echo "Var 9 Set<br />\n"; 
} elseif(isset($var_10)) { 
    echo "Var 10 Set<br />\n"; 
} 

function getSelectedVar($passed_var) { 
    $passed_var = strtoupper($passed_var); 
    $update_var = array(); 

    switch ($passed_var) { 
     case 'A': 
     case 'AB': 
     case 'ABC': 
     case 'ABCD': 
      $update_var_1 = 1; 
      $update_var = array('update_var_1'=>'1'); 
      break; 
     case 'B': 
     case 'BA': 
      $update_var_2 = 1; 
      $update_var = array('update_var_2'=>'1'); 
      break; 
     case 'C': 
      $update_var_3 =1; 
      $update_var = array('update_var_3'=>'1'); 
      break; 
     case 'D': 
     case 'DA': 
      $update_var_4 =1; 
      $update_var = array('update_var_4'=>'1'); 
      break; 
     case 'E': 
      $update_var_5 =1; 
      $update_var = array('update_var_5'=>'1'); 
      break; 
     case 'F': 
      $update_var_6 =1; 
      $update_var = array('update_var_6'=>'1'); 
      break; 
     case 'G': 
      $update_var_7 = 1; 
      $update_var = array('update_var_7'=>'1'); 
      break; 
     case 'H': 
     case 'HA': 
     case 'HB': 
      $update_var_8 =1; 
      $update_var = array('update_var_8'=>'1'); 
      break; 
     case 'I': 
      $update_var_9 =1; 
      $update_var = array('update_var_9'=>'1'); 
      break; 
     case 'J': 
     case 'JA': 
      $update_var_10 =1; 
      $update_var = array('update_var_10'=>'1'); 
      break; 
     default: 
      $update_var = ''; 
    } 

    return $update_var; 
} 

Я чем-то усложняю ???

ответ

1

Я думаю, что вам нужен массив $ GLOBALS. Например, если вы назначаете $ GLOBALS ['var_1'] = 1, то, когда вы вернетесь из функции, переменная $ var_1 будет установлена ​​в 1.

+0

Спасибо, я думаю, что это самый простой подход –

0

Вы не можете получить доступ к переменным, которые вы заявляете в функции извне. Но вы можете использовать ключевое слово global для доступа к глобальным переменным в вашей функции. Но я действительно не думаю, что это то, что вы на самом деле хотите сделать. Вы можете либо захотеть вернуть variable variable, либо reference.

// Variable variable example: 
$var_1 = 'test'; 
$a = 'var_1'; 
echo $$a; // outputs 'test' 

// Reference example: 
$var_1 = 'test'; 
$a = &$var_1; 
$a = 'test2'; 
echo $var_1; // outputs 'test2' 
+0

Я думаю, что это то, что я ищу, позвольте мне проверить; // Пример переменной переменной: $ var_1 = 'test'; $ a = 'var_1'; echo $$ a; // выдает 'test' –

0

Это трудно понять, что вы хотите достичь, но, как я вижу, вы выливать свой $ var_array, и вы увидите что-то вроде

Key: update_var_1 VALUE: 1 

И вы хотите, чтобы обновить переменную $ var_1 на основе этого имени?

Что-то вроде этого, с помощью РНР "variable variables" будет работать - первое, что вам нужно, чтобы получить имя переменной

$varname=str_replace("update_", "", $key); 

Затем вы можете присвоить ей значение

$$varname=$value 
0

Вы в первую очередь задаете переменную? Потому что в этот момент вы знаете, какой он есть, и вы можете передать некоторые указания относительно того, какая переменная была установлена, вместо того, чтобы возвращать «головоломку» к коду, который ее назвал.