2010-05-23 14 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

@Col। 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 तर्क: निश्चित ;-) बीटीडब्ल्यू, उसे इस कोड के साथ नोटिस मिलेगा, जब $ कार्डटाइप अमान्य है – 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 वीएसए के बराबर होगा।

आशा है कि यह मदद करता है। [चर कोडिंग के साथ 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.

संबंधित मुद्दे