2012-10-26 21 views
9

क्या यह काम नहीं करता है? या मैं बस गलत कर रहा हूँ? इसके कई बदलावों का प्रयास किया, और इस विषय पर कोई ठोस जानकारी नहीं लग रही है। कोई विचार?यदि कंसटेनेशन के बीच में कथन है?

$given_id = 1; 
while ($row = mysql_fetch_array($sql)) 
{ 
    if ($i < 10){ 
    $display = '<a href="' . $row['info'] . '" onMouseOver="' . if($row['type']=="battle"){ . 'showB' . } else { . 'showA'() . "><div class="' . $row['type'] . "_alert" . '" style="float:left; margin-left:-22px;" id="' . $given_id . '"></div></a>'; 
+0

क्यों तुम वैसे भी ऐसे ही अपठनीय कोड लिखना चाहते हैं? कोड को सही तरीके से लेआउट करें और आप प्रक्रिया में त्रुटि को ठीक कर देंगे। 'Sprintf' – Gordon

+0

का उपयोग करके प्रारंभ करें, यह नहीं पता कि भूगोल, समय या असामान्य स्थिति के साथ कुछ भी करने के लिए यह प्रश्न क्यों बंद कर दिया गया था। टर्नरी ऑपरेटर एक्स? वाई: जेड का विचार आमतौर पर कई परिस्थितियों में उपयोग किया जाता है, और मैंने पाया कि यह पृष्ठ मूल रूप से यह पता लगाने के लिए देख रहा है कि क्या PHP ने इस सुविधा की पेशकश की है। सौभाग्य से यह पृष्ठ अभी भी अस्तित्व में है (बंद होने के बावजूद), और मेरी क्वेरी को हल करने में सक्षम था। – dvaey

उत्तर

26

यदि एक स्वयं स्थायी बयान है। यह एक पूर्ण बयान की तरह है। तो आप तारों के संगतता के बीच में इसका उपयोग नहीं कर सकते हैं। बेहतर समाधान operatior

(conditional expression)?(ouput if true):(output if false); 

यह भी तार के संयोजन में इस्तेमाल किया जा सकता आशुलिपि त्रिगुट उपयोग करने के लिए है। उदाहरण:

$i = 1 ; 
    $result = 'The given number is'.($i > 1 ? 'greater than one': 'less than one').'. So this is how we cuse ternary inside concatenation of strings'; 

तुम भी नेस्टेड त्रिगुट ऑपरेटर का उपयोग कर सकते हैं:

$i = 0 ; 
    $j = 1 ; 
    $k = 2 ; 
    $result = 'Greater One is'. $i > $j ? ($i > $k ? 'i' : 'k') : ($j > $k ? 'j' :'k').'.'; 
+4

मुझे लगता है कि उस अंतिम पंक्ति की पठनीयता लगभग (1> 2? ('X'> 'फूल'? 0: 3) के परिणाम के बराबर है: ($ j> 42? Ceil (pi()): $ बिल्ली के बच्चे = सच) -1) ' – Mike

+0

-1; आप जो कुछ भी कर रहे हैं, वह पहले कुछ वाक्यों में * कथन * और एक * अभिव्यक्ति * के बीच भेद है, लेकिन इसके बजाय आप बनाए गए शब्द "स्वयं स्थायी कथन" और "पूर्ण कथन" का उपयोग करते हैं जो वास्तव में व्याख्या नहीं करता है क्यों एक 'if' निर्माण एक स्ट्रिंग पर concatenated नहीं किया जा सकता है। –

6

if..else एक बयान है और एक अभिव्यक्ति अंदर नहीं किया जा सकता। आप जो चाहते हैं वह "टर्नरी" ?: ऑपरेटर है: http://php.net/manual/en/language.operators.comparison.php#language.operators.comparison.ternary

$display = 'start ' . (($row['type']=="battle")? 'showB' : 'showA') . ' end '; 

http://php.net/manual/en/language.operators.comparison.php

+1

मुझे लगता है जैसे मैंने लॉटरी जीती है। – VVV

+0

टर्नरी ऑपरेटर अच्छा है, लेकिन यह कोड को कम पठनीय बना सकता है। इसका उपयोग करें जहां यह समझ में आता है, और यदि कोई और आपका कोड पढ़ रहा है तो आप इसका उपयोग न करने पर विचार करना चाहेंगे। – sgroves

+7

@VVV आपने मैन्युअल के लिए एक लिंक जीता है। इसे बुद्धिमानी से उपयोग करो। – deceze

2

अगर बयान त्रिगुट ऑपरेटर का उपयोग करके ?: एक आशुलिपि का प्रयोग करें। कोई अभिव्यक्ति के अंदर बयान नहीं डाल सकता है।

$str = 'foo'; 
if (cond) 
{ 
    $str .= 'bar'; 
}; 
$str .= 'baz'; 
+0

एक टर्नरी "शॉर्टंड अगर स्टेटमेंट" नहीं है, तो यह एक * अभिव्यक्ति * है। –

1

if पर "त्रिगुट ऑपरेटर्स" देखो एक बयान है -

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

  • कोई संबंधित समस्या नहीं^_^