2012-02-12 14 views
6

का उपयोग करके एक सरणी के माध्यम से लूपिंग मेरे पास एक शॉपिंग कार्ट सरणी है, जिसमें एक चर है जो मुझे बताता है कि उत्पाद सहायक है या नहीं, यह या तो हाँ या नहीं होगा। मुझे कार्ट के माध्यम से लूप करने और निम्न को खोजने की आवश्यकता है:कोल्डफ्यूजन

  • यदि कार्ट में केवल सामान हैं; कुछ भी करें।
  • यदि कार्ट केवल उत्पाद है; कुछ भी करें।
  • यदि कार्ट में उत्पाद और सहायक उपकरण हैं; कुछ भी करें।

मैं इस कोशिश कर रहे हैं:

<cfloop index="i" from="1" to="#arrayLen(session.mycart)#"> 
    <cfif session.mycart[i].accs EQ "yes"> 
    <cfset accPresent = "yes"> 
    </cfif> 
    <cfif session.mycart[i].accs EQ "no"> 
    <cfset prodpresent = "yes"> 
    </cfif> 
</cfloop> 

<cfif accPresent EQ "yes" and prodPresent EQ "no"> 
    <cfset bothPresent EQ "yes"> 
</cfif> 

यह नीचे गिर जाता है के रूप में accPresent नहीं पाया जाता है, यह मुझे लगता है कि इस तथ्य के पाश एक समय में एक के माध्यम से चला जाता है की वजह से है और ACCS बराबर नहीं है एक बार यह एक गैर सहायक उत्पाद खोजने के लिए हाँ। मैं जो करने की कोशिश कर रहा हूं उसे हासिल करने का सबसे अच्छा तरीका क्या है?

उत्तर

6

इस

<cfset accPresent = "no" /> 
<cfset prodPresent = "no" /> 
<cfloop index="i" from="1" to="#arrayLen(session.mycart)#"> 
    <cfif session.mycart[i].accs EQ "yes"> 
     <cfset accPresent = "yes"> 
    </cfif> 
    <cfif session.mycart[i].accs EQ "no"> 
     <cfset prodpresent = "yes"> 
    </cfif> 
</cfloop> 

<cfif accPresent EQ "yes" and prodPresent EQ "no"> 
    <cfset bothPresent EQ "yes"> 
</cfif> 
+1

भी चाहिए नहीं ' '

+0

भी दूसरा

3

जेसन करते हैं,

आपका 3 बयान मानता है कि AccPresent और ProdPresent दोनों उपलब्ध नहीं होगा। क्या आपने उन्हें पहले बनाया था और उन्हें डिफ़ॉल्ट मान दिए थे? इसे आज़माएं:

<cfparam name="accPresent" default="no"/> 
<cfparam name="prodPresent" default="no"/> 
<cfloop index="i" from="1" to="#arrayLen(session.mycart)#"> 
<cfif session.mycart[i].accs EQ "yes"> 
<cfset accPresent = "yes"> 
</cfif> 
<cfif session.mycart[i].accs EQ "no"> 
<cfset prodpresent = "yes"> 
</cfif> 
</cfloop>  
<cfif accPresent EQ "yes" and prodPresent EQ "no"> 
<cfset bothPresent EQ "yes"> 
</cfif> 

यह निश्चित रूप से मानता है कि इनमें से प्रत्येक को डिफ़ॉल्ट रूप से "नहीं" पर सेट किया जाना चाहिए।

+0

(लीग सुझाया गया है एक CFBREAK भी। यह एक अच्छा विचार है - लेकिन मुझे संदेह है कि एक शॉपिंग कार्ट में एक बहुत छोटी सरणी होगी, इसलिए आपको उसमें कोई प्रदर्शन किक नहीं मिलेगा। फिर भी, यह वास्तव में 2 loops के साथ जाने का सबसे प्रभावी तरीका होगा। जैसे ही आपके पास "हां" होता है, आप लूप से बाहर निकलते हैं और अगले ब्लॉक पर जाते हैं। –

+0

असल में मैंने इस सवाल को गलत तरीके से पढ़ा;) मैंने सोचा कि वे केवल दो स्थितियों से संबंधित थे (हैसॉक्शंस = सत्य/झूठी) इसलिए 'cfbreak' ने और अधिक समझदारी की। – Leigh

+0

हालांकि यह एक छोटी सी सरणी है, लेकिन वे केवल प्रत्येक की संख्या गिन सकते हैं। फिर यह निर्धारित करने के लिए गणना करें कि दोनों मौजूद हैं यानी ' दोनों' – Leigh

1

सीएफ 10 (या Railo 4), इस अधिक सुंदर ढंग से किया जा सकता है cfscript का उपयोग कर में और Underscore.cfc library:

_ = new Underscore(); 

myCart = duplicate(session.myCart); 

accPresent = _.any(myCart, function(val) { 
    return val.accs; 
}); 

prodPresent = _.any(myCart, function(val) { 
    return !val.accs; 
}); 

bothPresent = accPresent && prodPresent; 

_.find बारे में महान बात() है कि यह रूप में जल्द ही बंद हो जाता है इटरेटर के रूप में है फ़ंक्शन सत्य देता है, इसलिए आपको सरणी में प्रत्येक तत्व पर पुनरावृत्ति करने की आवश्यकता नहीं है।

नोट: डेडलॉक्स को रोकने के लिए साझा-स्कोप चरों तक पहुंचने पर डुप्लिकेट() का उपयोग करने की अनुशंसा की जाती है।

:

1

(अस्वीकरण मैं Underscore.cfc लिखा था) ColdFusion 8 और उच्च के संस्करणों में, किसी <cfloop> एक सरणी का उपयोग कर सकते सीधे

<cfloop index="i" array="#session.mycart#"> 
    <cfif i.accs EQ "yes"> 
    <cfset accPresent = "yes"> 
    </cfif> 
    <cfif i.accs EQ "no"> 
    <cfset prodpresent = "yes"> 
    </cfif> 
</cfloop> 

<cfif accPresent EQ "yes" and prodPresent EQ "no"> 
    <cfset bothPresent EQ "yes"> 
</cfif> 

नोट: i डेटा वाली struct को संदर्भित करता है कि , डेटा की स्थिति नहीं

http://livedocs.adobe.com/coldfusion/8/htmldocs/help.html?content=Tags_j-l_15.html

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