PHP Получить переменную равной значению ключа - PullRequest
12 голосов
/ 23 мая 2010

Я пытаюсь получить переменную на своей странице, равную результату переключателя, который у меня есть.

Это код:

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

Как я могу получить $ payment_method равным результату этого ????

Пока я получаю сообщение об ошибке:

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

Ответы [ 7 ]

13 голосов
/ 23 мая 2010

сделать так:

$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!';
}
9 голосов
/ 23 мая 2010

Используйте массивы!

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

$type = @$types[$cardtype] or echo "Please specify a payment method!";
7 голосов
/ 23 мая 2010

Вы должны присвоить значение в пределах переключателю:

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;
};
3 голосов
/ 11 июня 2011

Для вашего приложения ассоциативный массив будет лучшим решением. Однако, чтобы ответить на ваш вопрос , вы можете создать свой собственный переключатель / корпус из? операторы

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]);
3 голосов
/ 23 мая 2010

Вы не можете использовать конструкцию switch таким образом. Вам нужно будет присвоить $payment_method в пределах case частей.

В вашем случае, если вы все равно echo говорите, вы можете просто удалить $payment_method =, и оно должно работать.

Что было бы намного, намного проще, если поместить все вещи в массив:

$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];
2 голосов
/ 23 мая 2010

Вы должны сделать:

$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!";
}
1 голос
/ 04 февраля 2017

Если вы не хотите менять свой код (например, если у вас очень длинный переключатель), вы можете использовать Буферизация вывода .

<?php
ob_start();
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;
};
$payment_method = ob_get_clean();
?>

ob_start() запустит выводбуферизация (которая также остановит вывод) и ob_get_clean() завершит ее, возвращая все, что отображается во время работы.

Так, например, если $cardtype - это visa, $ payment_method будет равно VSA.

Надеюсь, это поможет.

Примечание: Возможно, это не очень хорошее решение, если возможно, пожалуйста, используйте решение из любого другого ответа.Ответ Пекки действительно хороший, попробуйте его.

...