2012-01-07 21 views
20

संभव डुप्लिकेट:
Reference - What does this symbol mean in PHP?पीएचपी - एम्पसेंड foreach पाश में चर से पहले

मुझे पता है कि हम क्यों foreach पाश में चर से पहले एम्परसेंड का उपयोग की जरूरत है

foreach ($wishdets as $wishes => &$wishesarray) { 
    foreach ($wishesarray as $categories => &$categoriesarray) { 

    } 
} 

धन्यवाद

उत्तर

8

इसका मतलब है कि यह मूल्य के बजाय संदर्भ द्वारा पारित किया गया है ... IE चर के किसी भी हेरफेर मूल को प्रभावित करेगा। यह उस मूल्य से अलग है जहां कोई भी संशोधन मूल वस्तु को प्रभावित नहीं करता है।

यह स्टैक ओवरफ्लो पर कई बार पूछा जाता है।

+1

, को जोड़ने के लिए "संदर्भ द्वारा" का अर्थ यह चर के लिए एक ही आबंटित स्मृति ब्लॉक करने के लिए बात कर के रूप में करने के लिए भेजा जा रहा है – Prof83

+1

:

मैं सुझाव है कि आप foreach PHP Manual page का रीड लेते हैं, यह सभी चार मामलों को शामिल किया गया "मूल्य से" का विरोध किया, जिसका अर्थ है कि चर की एक प्रति PHP द्वारा एक नई मेमोरी ब्लॉक में बनाई गई है। – Kaii

+0

प्रश्न उदाहरण कोड में संदर्भ पारित करने के दो तरीके हैं, [मैंने दोनों को रेखांकित किया] (http://stackoverflow.com/a/8769347/367456)। – hakre

4

यह मुख्य सरणी सरणी के एक उदाहरण में परिवर्तनों को लागू किया जाता है ..

के रूप में:

// अब परिवर्तन अभ्यस्त को प्रभावित सरणी $ wishesarray

foreach ($wishesarray as $id => $categoriy) { 
     $categoriy++; 
} 
print_r($wishesarray); //It'll same as before.. 

लेकिन अब बदल जाता है सरणी $ wishesarray में भी प्रतिबिंबित होगा

foreach ($wishesarray as $id => &$categoriy) { 
     $categoriy++; 
} 
print_r($wishesarray); //It'll have values all increased by one.. 
36

यह उदाहरण आपको दिखाएगा अंतर

$array = array(1, 2); 
foreach ($array as $value) { 
    $value++; 
} 
print_r($array); // 1, 2 because we iterated over copy of value 

foreach ($array as &$value) { 
    $value++; 
} 
print_r($array); // 2, 3 because we iterated over references to actual values of array 

इस यहाँ पीएचपी डॉक्स देखें: http://pl.php.net/manual/en/control-structures.foreach.php

+0

क्या _by संदर्भ_ वाक्यविन्यास अक्सर त्रुटियों का कारण नहीं बनता है: "स्ट्रिंग ऑफसेट से संदर्भ नहीं बना सकते"? –

1

अपने प्रश्न में कोड के लिए, कोई विशिष्ट जवाब दिया क्योंकि भीतरी foreach पाश खाली है हो सकता है।

मैं आपके कोड के साथ क्या देखता हूं, आंतरिक foreach सामान्य तरीके के बजाय संदर्भ पर पुनरावृत्त करता है।

foreach($standard as $each); 

foreach($standard as &$each); # this is used in your question 

$reference = &$standard; 
foreach($reference as $each); 

$reference = &$standard; 
foreach($reference as &$each); # this is used in your question 
संबंधित मुद्दे