2011-08-23 5 views
12

मैंने बस एक बग का शिकार करने में 2 घंटे बिताए जो स्पष्ट रूप से & मूल्य के साथ एक foreach पुनरावृत्ति से आता है। मैं एक multidimentional सरणी और जब है एक भाग गया यह:संदर्भ द्वारा PHP पुनरावृत्ति क्यों एक डुप्लिकेट अंतिम रिकॉर्ड देता है?

foreach($arrayOfJsonMods as &$item){ 
     //TODO memcached votes 
    } 

और PHP एक ही तत्व गिनती के साथ एक सरणी वापस लौटे, लेकिन डुप्लीकेट पिछले रिकॉर्ड के साथ। क्या इस संरचना के बारे में मुझे कुछ समझ नहीं आया है?

मैंने एक अलग मशीन पर कोड चलाया, और नतीजा वही था।

+4

हमें अपने कोड –

+0

यह ऐसा नहीं होना चाहिए, तो आपको कुछ उदाहरण प्रदान कर सकते हैं दिखाने के? – XzKto

+0

एक एसओ सवाल पोस्ट करने के लिए साहस के लिए +1 जो सिर्फ उपयोगकर्ता-त्रुटि होना है, लेकिन नहीं है। आसानी से बस 2 घंटे डिबगिंग और लॉगिंग और सरलीकृत कोड जोड़ना जब तक कि मेरे पास php foreach डुप्लिकेट Google के अलावा कोई विकल्प नहीं था और यहां मिला। बहुत धन्यवाद @ vasion। –

उत्तर

27

मुझे लगता है कि आपको यहाँ&$item पुन: उपयोग और आप एक व्यवहार जो एक हज़ार बार बग के रूप में सूचित किया गया है लेकिन संदर्भ की सही व्यवहार है, जिसके कारण manual advises पर पहुंचने रहे हैं कि कर रहे हैं कि:

$ मूल्य का संदर्भ और अंतिम सरणी तत्व फोरच लूप के बाद भी रहता है। इसे अनसेट() द्वारा नष्ट करने की अनुशंसा की जाती है।

foreach($arrayOfJsonMods as &$item) 
{ 
    //TODO memcached votes 
} 
unset($item); 

देखें https://bugs.php.net/bug.php?id=29992

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