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

중복 가능성 (http://stackoverflow.com/questions/2875567/php-troubles-with-coding-variables) –

+0

@ 중령. Shrapnel : 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 구조물이 방법을 사용할 수 없습니다

지금까지 내가 오류를받을. 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

+1

@zerkms : 오른쪽, 고정 메인, 다운 투표를 고려하십시오. 감사합니다 –

+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와 같습니다.

희망이 있습니다. [변수를 코딩 PHP 트러블]의

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.