2012-10-23 15 views
11

मैं एक सरणी में डेटा पर एक साफ नौकरी चलाने की कोशिश कर रहा हूं, विशेष रूप से युग के समय को YYYY-MM-DD में परिवर्तित कर रहा हूं।मैं फ़ोरैच लूप के साथ सरणी में डेटा क्यों अपडेट नहीं कर सकता?

मैं मूल रूप से इस समारोह की कोशिश की:

foreach ($data as $row) { 
    $row['eventdate'] = date('Y-m-d', $row['eventdate']); 
} 

echo '<pre>'; 
print_r($data); 
echo '</pre>'; 

हालांकि foreach पाश डेटा को अद्यतन नहीं किया है जब मैं यह उत्पादन।

पाश के लिए किया था निम्नलिखित काम:

for ($i=0; $i<count($data); $i++) { 
    $data[$i]['eventdate'] = date('Y-m-d', $data[$i]['eventdate']); 
} 

पहले पाश क्यों असफल क्यों हुआ और दूसरा काम करता है? क्या वे वही नहीं हैं?

उत्तर

29

उसे नष्ट करने की सिफारिश की है, $row "दर-मूल्य", नहीं "द्वारा-संदर्भ" का इस्तेमाल किया जा रहा है।

foreach ($data as &$row) { 
    $row['eventdate'] = date('Y-m-d', $row['eventdate']); 

या, आप कुंजी/मान विधि का उपयोग कर सकते हैं:: क्योंकि foreach बयान में

foreach ($data as $index => $row) { 
    $data[$index]['eventdate'] = date('Y-m-d', $row['eventdate']); 
+0

विस्तृत विवरण और उदाहरण के लिए धन्यवाद! – Choy

+1

@Choy आप पहली चेतावनी [यहां] (http://php.net/manual/en/control-structures.foreach.php) भी देखना चाह सकते हैं। –

7

प्रारंभिक उदाहरण केवल मूल्य से पंक्ति को पास करता है और संदर्भ द्वारा नहीं।

डॉक्स

आदेश में से सीधे & साथ पाश पूवर् म होना $ मूल्य के भीतर सरणी तत्वों को संशोधित करने में सक्षम हो। उस मामले में मूल्य संदर्भ

इसलिए द्वारा आवंटित किया जाएगा या तो संदर्भ

foreach ($data as &$row) { 
    $row['eventdate'] = date('Y-m-d', $row['eventdate']); 
} 

या का उपयोग अधिक स्पष्ट वाक्य रचना

foreach ($data as $key => $value) { 
    $data[$key]['eventdate'] = date('Y-m-d', $value['eventdate']); 
} 
महत्व के

इसके अलावा द्वारा पास में यह चेतावनी है दस्तावेज़

एक संदर्भ $ मूल्य और अंतिम सरणी तत्व फ़ोरैच लूप के बाद भी रहता है। यह आप जिस तरह से आप वर्तमान में कर रहे हैं, foreach ($data as $row) { में एक foreach पाश का उपयोग करते समय द्वारा सेट किए बिना()

1

, आप की जरूरत &$row को जोड़कर एक संदर्भ के लिए

कोशिश अपडेट करना संदर्भ द्वारा दूसरे तर्क को पारित करने के लिए।

चेक प्रलेखन: http://www.php.net/manual/en/control-structures.foreach.php