यह एक साधारण प्रोग्रामिंग प्रश्न है, जो कि foreach
लूप के दौरान PHP की सरणी प्रतिलिपि बनाने और परेशान करने के बारे में ज्ञान की कमी से आ रहा है। ऐसा इस तरह है, मेरे पास एक सरणी है जो मेरे द्वारा एक बाहरी स्रोत से स्वरूपित है जिस तरह से मैं बदलना चाहता हूं। एक साधारण उदाहरण होगा:स्मृति पर सहेजने के दौरान सरणी मानों को अनसेट करना क्या करता है?
$myData = array('Key1' => array('value1', 'value2'));
लेकिन क्या मैं की तरह कुछ हो जाएगा चाहते हैं:
$myData = array([0] => array('MyKey' => array('Key1' => array('value1', 'value2'))));
तो मैं पहले $myData
लेने के लिए और दूसरा $myData
तरह स्वरूपित। मैं अपने स्वरूपण एल्गोरिदम के साथ पूरी तरह से ठीक हूँ। मेरा सवाल स्मृति को बचाने के लिए एक रास्ता खोजने में निहित है क्योंकि इन सरणीओं को थोड़ा कमजोर हो सकता है। तो, मेरे foreach
लूप के दौरान मैं वर्तमान सरणी मान को नए प्रारूप में कॉपी करता हूं, फिर मैं उस मूल मान को अनसेट करता हूं जिसे मैं मूल सरणी से काम कर रहा हूं। उदा .:
$formattedData = array();
foreach ($myData as $key => $val) {
// do some formatting here, copy to $reformattedVal
$formattedData[] = $reformattedVal;
unset($myData[$key]);
}
unset()
यहाँ एक अच्छा विचार करने के लिए कॉल है? यानी, क्या यह स्मृति को संरक्षित करता है क्योंकि मैंने डेटा कॉपी किया है और अब मूल मूल्य की आवश्यकता नहीं है? या, PHP स्वचालित रूप से डेटा एकत्रित करता है क्योंकि मैं किसी भी बाद के कोड में इसका संदर्भ नहीं देता हूं?
कोड ठीक चलाता है, और अब तक मेरे डेटासेट प्रदर्शन अंतरों के परीक्षण के लिए आकार में बहुत नगण्य रहे हैं। मुझे नहीं पता कि मैं बाद में कुछ अजीब बग या सीपीयू हिट के लिए खुद को स्थापित कर रहा हूं या नहीं।
किसी भी अंतर्दृष्टि के लिए धन्यवाद।
-sR
जब तक अपने डेटा strucutes absolutly विशाल कर रहे हैं (अपने राम के एक बड़े अंश) तो आप कुछ भी नहीं के बारे में चिंता कर रहे हैं। यदि php एक मेनोरी चलाता है तो यह आपको बताएगा, और आप इसे php.ini में बढ़ा सकते हैं। – Ian
यह एक * मूर्ख विचार * है। आपने अभी एक साइड-इफेक्ट पेश किया है जिसे बाद में कुछ * माइक्रो-ऑप्टिमाइज़ेशन * के लिए भुला दिया जा सकता है: -/और नहीं, PHP (न ही कोई अन्य मानक जीसी भाषा जिसे मैं जानता हूं) डेटा * निहित * बनाने में सक्षम है डेटा कंस्ट्रक्शन पुनर्निर्माण के लिए उपलब्ध है जबकि * कंटेनर * के संदर्भ में मौजूद है (इसमें नरम/कमजोर संदर्भों जैसे विचार शामिल नहीं हैं)। 'अनसेट' PHP जीसी को लात मारने का कारण बन सकता है, लेकिन वास्तविक प्रदर्शन प्राप्त हुआ - यदि कोई हो - जारी किए गए स्मृति दबाव के कारण सामान्यीकृत करने के लिए तुच्छ नहीं है। यदि यह * एक समस्या बन जाती है, * तो * इसे संबोधित करें। –
इस सरणी का आकार क्या है? –