PHP anahtarı eşit değer değişkeni alın

6 Cevap php

Ben var bir anahtarın sonucunu eşit sayfamda bir değişkeni almak için çalışıyorum.

Bu kodu:

$payment_method = switch ($cardtype) {
case "visa" : echo "VSA"; break;
case "mastercard" : echo "MSC"; break;
case "maestro" : echo "MAE"; break;
case "amex" : echo "AMX" ; break;
default : echo "Please specify a payment method!"; break;
};

Nasıl ben bu sonucu eşit $ payment_method alabilirim??

Bugüne kadar ben bir hata alma:

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

6 Cevap

: Sen değerini within anahtarı atamanız gerekir

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;
    default:
        echo "Please specify a payment method!";
    break;
};

Bu şekilde yapılacak:

$types = array('visa' => 'VSA', 'mastercard' => 'MSC', 'maestro' => 'MAE', 'amex' => 'AMX');
if (isset($types[$cardtype])) {
    $payment_method = $types[$cardtype];
} else {
    echo 'Please specify a payment method!';
}

Diziler kullanın!

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

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

Yapmanız gereken:

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

Sizin için application, bir ilişkisel dizi en iyi çözüm olacaktır. Için question ancak, dışında kendi anahtarı / case inşa edebilirsiniz cevaplamak için? operatörler

var card  = 'amex'; //however you retrieve that value

var method = card == 'visa' ? 'VSA' : card == 'mastercard' ? 'MSC' : card == 'maestro' ? 'MAE' : card == 'amex' : 'AMX' : null;  //default value is null

//  store error msgs elsewhere in the code, to ease translation/alteration
var errs = {
 'ENG', {'Please specify a payment method', '...', '...', '...'},
 'ESP', {'Favor, indique la forma de pago', '...', '...', '...'},
 'DEU', {'Bitte geben Sie eine Zahlungsmethode', '...','...','...'}
}

//  alert the appropriate error message, in the current language

var currentLang = 0; //however you set that value
if(!method) alert(errs[currentLang][0]);

Bu şekilde inşa switch kullanamazsınız. Sen case parçaları içinde $payment_method atamak gerekir.

Sizin durumunuzda, sen gibi görme echo neyse ing, sadece $payment_method = kaldırabilirsiniz ve çalışması gerekir.

Çok, çok daha kolay olurdu Ne olsa da, bir diziye bütün şeyler koyarak:

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