php - How to filter an array to remove parents with childs equal to zero? -
मेरे पास एक सरणी संरचना है जैसे:
$ something = सरणी (0 = & gt; सरणी ('लेबल' = & gt; 'फू', 'आइटम' = & gt; सरणी ('123' = & gt; 4, '124' = & gt; 0,)), 1 = & gt; सरणी ('लेबल' = & gt ; 'बार', 'आइटम' = & gt; सरणी ('125' = & gt; 5, '126' = & gt; 1,)), 2 = & gt; सरणी ('लेबल' = & gt; 'बाज़', 'आइटम '= & Gt; सरणी (' 127 '= & gt; 0,' 128 '= & gt; 0,)));
और मुझे मूल्य शून्य के साथ सभी 'आइटम्स' कुंजी को निकालने की जरूरत है, और अगर किसी आइटम का कोई बच्चा नहीं है, तो पूरे ब्लॉक को हटा दें।
तो, फ़िल्टरिंग के बाद वह सरणी, मुझे ये होना चाहिए:
सरणी (2) {[0] = & gt; सरणी (2) {["लेबल"] = & gt; "फू" ["आइटम"] = & gt; सरणी (1) {[123] = & gt; 4}} [1] = & gt; सरणी (2) {["लेबल"] = & gt; "बार" ["आइटम"] = & gt; सरणी (2) {[125] = & gt; 5 [126] = & gt; 1)}}
मैंने सफलतापूर्वक बिना array_filter, array_walk और array_walk_recursive (यह एक अच्छा काम करता है - लेकिन - मुझे कॉलबैक फ़ंक्शन में की जाने वाली चाबियाँ निकालने की अनुमति नहीं है) का उपयोग करने का प्रयास किया है। ।
क्या मैं एक नए एक सरणी में विरूपण और पुन: निर्माण करने के लिए, या क्या मैं array_ * फ़ंक्शंस का सही इस्तेमाल नहीं कर रहा हूं?
<पूर्व>
$ कुछ = सरणी (..); // $ (= i = 0, $ iMax = गणना ($ कुछ); $ i & lt; $ iMax; $ i ++) के लिए उपरोक्त परिभाषित {foreach ($ something [$ i] ['आइटम'] $ key = & gt के रूप में ; $ मान) {यदि (! $ मूल्य) अनसेट ($ कुछ [$ i] ['आइटम'] [$ की]); } अगर (गणना ($ कुछ [$ i] ['आइटम']) == 0) अनसेट ($ कुछ [$ i]); } $ कुछ = array_values ($ कुछ); // रीसेट इंडेक्स
Comments
Post a Comment