Domanda

Ok, ho dieci variabili ma è necessario impostarne una, ma devo verificare ciascuno dei valori fino a quando non viene impostato uno. Sto facendo un'istruzione SWITCH / CASE ma non sono sicuro che questo sia l'approccio migliore perché non vedo come posso restituire solo la variabile che devo impostare.

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

Sto complicando le cose ???

È stato utile?

Soluzione

Penso che ciò di cui hai bisogno qui sia l'array $ GLOBALS. Ad esempio, se si assegna $ GLOBALS ['var_1'] = 1, quando si ritorna dalla funzione, la variabile $ var_1 verrà impostata su 1.

Altri suggerimenti

Non è possibile accedere alle variabili dichiarate nella funzione dall'esterno. Ma puoi usare la parola chiave global per accedere alle variabili globali nella tua funzione. Ma non penso proprio che sia quello che vuoi davvero fare. Potresti voler restituire una variabile variabile o una riferimento .

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

È difficile capire cosa vuoi ottenere, ma come lo vedo, scarichi il tuo $ var_array e vedrai qualcosa come

Key: update_var_1 VALUE: 1

E vuoi aggiornare la variabile $ var_1 in base a quel nome?

Qualcosa del genere, usando le " variabili variabili " funzionerebbe: per prima cosa devi derivare il nome della variabile

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

Quindi puoi assegnargli il valore

$varname=$value

Sei tu a impostare la variabile in primo luogo? Perché a quel punto sai quale è, e potresti restituire qualche indicazione su quale variabile è stata impostata, invece di restituire un "puzzle". al codice che lo ha chiamato.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top