foreach's documentation से:
जब तक सरणी संदर्भित है, foreach निर्दिष्ट सरणी की एक प्रति और न सरणी पर ही चल रही है। foreach सरणी सूचक पर कुछ पक्ष प्रभाव है। के दौरान सरणी सूचक पर भरोसा न करें या इसे रीसेट किए बिना प्रचार के बाद।
इसका मतलब क्या है कि आपके $ व्यक्ति चर आप चाहते हैं वास्तव में क्या है, इस कोड को प्रभावी बनाने में इसी तरह की सरणी में था की एक प्रति है (ध्यान दें कि इस कोड कई स्तरों पर केवल और गलत को समझने के लिए है, है) ठीक से अपने सरणी पर रीसेट(), वर्तमान() और अगले() फ़ंक्शन पाश करने के लिए उपयोग करते हैं, see here:
for ($i = 0; $i < count($people); $i++) {
$person = $people[$i];
// code inside your foreach ...
}
तो अगर आप $ व्यक्ति की सामग्री को बदल, आप वास्तव में बदलाव न करें अंदर क्या है $ लोग सरणी
इसे हल करने के लिए, आप या तो एक संदर्भित foreach का उपयोग कर सकते हैं:
foreach ($people as &$person) { // note the &
$person = $calculated_visit_value; // $person is now a reference to the original value inside $people and thus this will work as intended
}
ध्यान दें कि refence में अवरोध है जब foreach पाश समाप्त होता है, तो यह के अंत में $ व्यक्ति अभी भी $ लोगों के अंतिम तत्व के लिए संदर्भ है। यदि आपको नहीं पता कि संदर्भ क्या हैं, तो कृपया अधिक जानकारी के लिए the documentation देखें।
या मूल सरणी तक पहुँचने के लिए कुंजी का उपयोग करें: आपकी जानकारी के लिए
foreach ($people as $person_index => $person) {
$people[$person_index] = $calculated_visit_value;
}
, तो आप उपयोग कर सकते हैं दोनों एक साथ
foreach ($people as $person_index => &$person { ...
अपने foreach द्वारा किए गए सरणी की एक प्रतिलिपि (* * $ के रूप में ...) –