2010-05-23 13 views
8

Tôi đang cố gắng để có được một biến trên trang của tôi bằng với kết quả của một công tắc mà tôi có.PHP Nhận biến cho giá trị bằng nhau của công tắc

Đây là mã:

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

Làm thế nào tôi có thể nhận được $ PAYMENT_METHOD để bằng kết quả của việc này ????

Cho đến nay tôi nhận được một lỗi:

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

thể trùng lặp của [rắc rối php với mã hóa biến] (http://stackoverflow.com/questions/2875567/php-troubles-with-coding-variables) –

+0

@Col. Shrapnel: lol, cùng một câu hỏi từ cùng một người dùng% -) – zerkms

+0

Không hoàn toàn giống nhau. Bây giờ anh ta yêu cầu phân bổ biến, không phải là tiếng vọng. Nhưng đó là lý do tại sao tất cả các mã này là xấu: anh ấy chỉ sao chép/baste nó mà không cần sự hiểu biết. –

Trả lời

5

Bạn nên gán giá trị trong sự chuyển đổi:

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

Bạn không thể sử dụng switch xây dựng theo cách này. Bạn sẽ phải chỉ định $payment_method trong các phần case.

Trong trường hợp của bạn, dù bạn vẫn đang ở trạng thái echo, bạn chỉ có thể xóa $payment_method = và nó sẽ hoạt động.

Điều gì sẽ là nhiều, dễ dàng hơn nhiều, tuy nhiên, là đưa tất cả những thứ vào một mảng:

$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

Bạn nên làm:

$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

mặc định: $ payment_method = "Vui lòng chỉ định phương thức thanh toán!"; // với việc triển khai này, sẽ không thể có được phương thức thanh toán hợp lệ hay không. – zerkms

+1

@zerkms: đúng, cố định chính, vui lòng xem xét phiếu bầu của bạn. Cảm ơn –

+0

@Wed Logic: cố định ;-) btw, anh ta sẽ nhận được thông báo với mã này, khi $ cardtype không hợp lệ – zerkms

8

làm theo cách này:

$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

Sử dụng mảng!

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

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

Đối với ứng dụng , một mảng kết hợp sẽ là giải pháp tốt nhất. Tuy nhiên, để trả lời câu hỏi câu hỏi của bạn, bạn có thể tạo khóa chuyển/trường hợp của riêng mình? nhà khai thác

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

bạn không nên sử dụng toán tử bậc ba theo cách như vậy. Khả năng đọc là tối quan trọng và trong trường hợp này, công tắc là cách tốt nhất để đi. – wlf

1

Nếu bạn không muốn thay đổi mã của mình (như nếu bạn có công tắc rất dài), bạn có thể sử dụng 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() sẽ bắt đầu sản xuất đệm (mà cũng sẽ ngừng đầu ra) và ob_get_clean() sẽ kết thúc nó, trở về tất cả mọi thứ lặp lại trong khi ob chạy.

Vì vậy, ví dụ: nếu $cardtype là visa, $ payment_method sẽ bằng VSA.

Hy vọng điều đó sẽ hữu ích.

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.

Các vấn đề liên quan