2010-05-23 2 views
8

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

Это код:

$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 
+0

возможно дубликат [PHP неприятностей с кодированием переменных] (http://stackoverflow.com/questions/2875567/php-troubles-with-coding-variables) –

+0

@Col. Шрапнель: lol, тот же вопрос от того же пользователя% -) – zerkms

+0

Не совсем то же самое. Он просит переменную назначение сейчас, а не эхо. Но вот почему все эти коды плохие: он просто копирует/обманывает его, не понимая. –

ответ

5

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

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

Вы не можете использовать 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

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

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

default: $ payment_method = "Укажите способ оплаты!"; // с этой реализацией будет невозможно получить способ оплаты или нет. – zerkms

+1

@zerkms: правый, фиксированный основной, пожалуйста, рассмотрите ваш голос. Спасибо – 2010-05-23 14:12:26

+0

@Wed Logic: fixed ;-) btw, он получит уведомление с этим кодом, когда $ cardtype недействителен – zerkms

8

сделать следующим образом:

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

Использование массивов!

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

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

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

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]); 
+1

, вы не должны использовать тернарный оператор таким образом. Считываемость имеет первостепенное значение, и в этом случае коммутатор - лучший способ. – wlf

1

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

<?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 - это визу, $ payment_method будет соответствовать VSA.

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

Note: This might not be a good solution, if possible, please, use solution from any other answer. Pekka's answer is really good one, try his.

Смежные вопросы