2010-05-23 94 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) – 2010-05-23 14:09:14

+0

@col。弹片:大声笑,同样的问题来自同一个用户% - ) – zerkms 2010-05-23 14:13:06

+0

不完全相同。他现在要求进行变量赋值,而不是回声。但这就是为什么所有这些代码都很糟糕的原因:他只是在没有理解的情况下进行复制/拼凑。 – 2010-05-23 14:17:13

回答

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结构这种方式。您必须在case部件中指定$payment_method

在你的情况下,无论如何看你是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

默认值:$ payment_method =“请指定付款方式!”; //在此实现中,无法获得付款方式是否有效。 – zerkms 2010-05-23 14:11:33

+1

@zerkms:对,固定主要,请考虑你的投票。谢谢 – 2010-05-23 14:12:26

+0

@Wed逻辑:固定;-) btw,当$ cardtype无效时,他将得到此代码的通知 – zerkms 2010-05-23 14:14:56

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 2012-12-05 11:23:19

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()将结束它,一切都恢复呼应,而OB运行。

因此,例如,如果$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.