12
votes

PHP Obtenez une variable à une valeur égale du commutateur

J'essaie d'obtenir une variable sur ma page pour égaler le résultat d'un commutateur que j'ai.

Ceci est le code: p> xxx pré>

Comment puis-je obtenir $ Paiement_method à égaler le résultat de cela ???? p>

Jusqu'à présent, je reçois une erreur: P>

Parse error: syntax error, unexpected T_SWITCH in /var/www/account/credits/moneybookers/process.php on line 65


3 commentaires

Dupliqué possible de PHP Troubles avec des variables de codage


@Col. Shrapnel: lol, la même question du même utilisateur% -)


Pas exactement pareil. Il demande à l'affectation de la variable maintenant, pas d'écho. Mais c'est pourquoi tous ces codes un mauvais: il vient de copier / à la baster sans compréhension.


8 Réponses :


4
votes

Vous ne pouvez pas utiliser le commutateur code> construire de cette façon. Vous devriez avoir attribuer $ paiement_method code> dans le cas code> Pièces code>.

Dans votre cas, voyant comme étant echo code> peut simplement supprimer $ pay_method = code> et il devrait fonctionner. p>

Quel serait ce qui serait beaucoup, beaucoup plus facile, cependant, met tout le matériel dans un tableau: P>

$payment_methods = array(
  "visa" => "VSA",
  "mastercard" => "MSC",
  "maestro" => "MAE",
  "amex" => "AMX"
);

if (!array_key_exists($cardtype, $payment_methods))
 echo "Please specify a payment method!";
else
 echo "Your method: ".$payment_methods[$cardtype];


0 commentaires

2
votes

Vous devriez faire:

$payment_method = '';

switch ($cardtype) {
  case "visa" : $payment_method = "VSA"; break;
  case "mastercard" : $payment_method = "MSC"; break;
  case "maestro" : $payment_method = "MAE"; break;
  case "amex" : $payment_method = "AMX" ; break;
}

if (strlen($payment_method))
{
  echo $payment_method;
}
else
{
  echo "Please specify a payment method!";
}


5 commentaires

Par défaut: $ paiement_method = "Veuillez spécifier une méthode de paiement!"; // avec cette implémentation, il sera impossible d'obtenir est la méthode de paiement valide ou non.


@zerkms: Droite, principale fixe, veuillez considérer votre vote en direct. Merci


@Wed logic: corrigé ;-) BTW, il recevra un avis avec ce code, quand $ cardype est invalide


@zerkms: ce qu'il voudrait remarquer, ne pouvait pas vous avoir?


maintenant rien. J'ai commenté la révision n ° 2 sans si (Strlen ()), que vous avez ajoutée plus tard ;-)



7
votes

Vous devez affecter la valeur dans l'interrupteur: xxx


0 commentaires

14
votes

faire de cette façon: xxx


0 commentaires

10
votes

Utiliser des tableaux!

$types = array("visa"       => "VSA",
               "mastercard" => "MSC",
               "maestro"    => "MAE",
               "amex"       => "AMX");

$type = @$types[$cardtype] or echo "Please specify a payment method!";


0 commentaires

3
votes

pour votre application , une matrice associative sera la meilleure solution. Pour répondre à votre question toutefois, vous pouvez créer votre propre commutateur / case? opérateurs xxx


1 commentaires

Vous ne devriez pas utiliser l'opérateur ternaire de telle manière. La réadapibilité est primordiale et dans ce cas, un commutateur est le meilleur moyen d'aller.



1
votes

Si vous ne voulez pas changer votre code (comme si vous avez un commutateur très long), vous pouvez utiliser tampon de sortie . xxx

ob_start () démarrera la mémoire tampon de sortie (qui va également arrêter la sortie) et ob_get_clean () finira-le, ce qui renvoie tout écho tandis que l'ob cours d'exécution.

donc, par exemple, si $ cardype est visa, $ paiement_method sera égal à VSA .

J'espère que cela aide.

Remarque: Ce n'est peut-être pas une bonne solution, si possible, s'il vous plaît, utilisez la solution de toute autre réponse. La réponse de Pekka est vraiment bonne, essayez-la.


0 commentaires

1
votes

Utiliser correspondez code> instruction.

https://www.php.net/manual/fr/control-tructures.match.php p>

Exemple: P>

$message = match ($statusCode) {
    200, 300 => null,
    400 => 'not found',
    500 => 'server error',
    default => 'unknown status code',
};


0 commentaires