php - nested foreach with iterator interface -
& lt ;? विदेशी मुद्रा ($ इस- & gt; मापदंड के रूप में $ कुंजी = & gt; $ मान):? & Gt; & Lt; li & gt; & lt;? = $ This- & gt; आवास लिंक ($ this- & gt; मापदंड, $ कुंजी)? & Gt; & lt; / li & gt; के & lt ;? एंडफोरेक? & Gt;
यह कोड अप्रत्याशित परिणाम देते हैं, क्योंकि केवल एक लिंक दिखाई दे रहा है लेकिन इन वस्तुओं में दो चीजें हैं-> मानदंड।
मैंने समस्या के कारणों की खोज की समारोह में रहने वाली लिंक एक और विदेशी मुद्रा लूप है जो एक ही मानदंड ऑब्जेक्ट पर काम करता है
foreach ($ कुंजी = $ मान = & gt; $ value) {$ params [$ key] = $ value; }
$ this-> मापदंड और $ मापदंड एक ही वस्तु है जो php इटरेटर इंटरफ़ेस लागू करता है क्या इस कोड को काम करने का कोई आसान तरीका है या क्या पीएचपी इटरेटर इंटरफ़ेस के साथ वेश्याभ्यास के नतीजे संभव नहीं हैं?
ठीक है, दूसरा विदेशी मुद्रा कॉल करने जा रहा है $ iterator-> reset ()
से पहले चल रहा है इसलिए जब द्वितीय foreach इटरेटर के अंत तक पहुंचता है, तो आंतरिक सूचक पहले से ही सरणी के अंत में है ...
यह ऐसा होगा:
$ है- & gt; रीसेट (); जबकि ($ it- & gt; मान्य ()) {$ it- & gt; रीसेट (); जबकि ($ it- & gt; वैध ()) {// कुछ $ it- & gt; अगला (); } $ It- & gt; अगला (); }
इसे $ it-> next ()
बाहरी लूप में कॉल करें, यह पहले से ही अमान्य है। तो अगला ()
कॉल "असफल" होगा, और $ it- & gt; मान्य ()
झूठी वापसी करेगा।
यह कोई समस्या नहीं है इटरेटर, यह आपके द्वारा उपयोग किए जा रहे तर्क के साथ एक समस्या है अगर आपको वास्तव में घोंसला लूप चाहिए, तो फिर से क्लोन
इटररेटर ( $ subit = clone $ colon $
) इनर लूप में है ताकि आप पॉइंटर को परेशान न करें ...
संपादित करें: क्लोनिंग के साथ उदाहरण:
$ it- & gt; रीसेट (); जबकि ($ it- & gt; वैध ()) {$ bar = क्लोन $ it; $ Bar- & gt; रीसेट (); जबकि ($ बार- & gt; मान्य ()) {// कुछ $ बार करें- & gt; अगला (); } $ It- & gt; अगला (); या तो, foreach का प्रयोग कर रहे हैं (जो अर्थात् समतुल्य है): foreach ($ key = & gt; $ मान के रूप में $ $) {$ subit = इसे क्लोन करें; विदेशी मुद्रा ($ c = & gt; $ v) के रूप में $ subit {// Do stuff}}
Comments
Post a Comment