मुझे इस बात की चिंता है कि कितने प्रोग्रामर ने निर्दोष रूप array_values(array_filter())
से अपने कोड में विधि को कॉपी / पेस्ट किया है - मुझे आश्चर्य है कि कितने प्रोग्रामर अनजाने में array_filter के लालच के कारण समस्याओं में भाग गए। या इससे भी बदतर, कितने लोगों ने कभी नहीं पाया कि फ़ंक्शन सरणी से बहुत सारे मूल्यों को शुद्ध करता है ...
मैं NULL
एक सरणी से तत्वों को अलग करने और चाबियों को फिर से अनुक्रमित करने की दो-भाग प्रक्रिया के लिए एक बेहतर विकल्प पेश करूंगा ।
हालांकि, सबसे पहले, यह बेहद महत्वपूर्ण है कि मैं लालची प्रकृति पर जोर देता हूं array_filter()
और यह कैसे चुपचाप आपकी परियोजना को बंद कर सकता है। यहाँ इसमें मिश्रित मूल्यों के साथ एक सरणी है जो परेशानी को उजागर करेगा:
$array=['foo',NULL,'bar',0,false,null,'0',''];
अपरकेस / लोअरकेस की परवाह किए बिना अशक्त मान हटा दिए जाएंगे।
लेकिन जब हम array_values () और array_filter () का उपयोग करते हैं तो सरणी में जो कुछ भी है उसे देखें :
array_values(array_filter($array));
आउटपुट सरणी ($ सरणी):
array (
0 => 'foo',
1 => 'bar'
)
// All empty, zero-ish, falsey values were removed too!!!
अब देखें कि आपको मेरे तरीके से क्या मिलता है जो array_walk () & का उपयोग करता है एक नया फ़िल्टर किया गया is_null () का
array_walk($array,function($v)use(&$filtered){if(!is_null($v)){$filtered[]=$v;}});
यह आसान पढ़ने / समझाने के लिए कई लाइनों पर लिखा जा सकता है:
array_walk( // iterate each element of an input array
$array, // this is the input array
function($v)use(&$filtered){ // $v is each value, $filter (output) is declared/modifiable
if(!is_null($v)){ // this literally checks for null values
$filtered[]=$v; // value is pushed into output with new indexes
}
}
);
आउटपुट सरणी ($ फ़िल्टर):
array (
0 => 'foo',
1 => 'bar',
2 => 0,
3 => false,
4 => '0',
5 => '',
)
मेरी विधि के साथ आपको अपनी पुन: अनुक्रमित कुंजी, सभी गैर-शून्य मान, और कोई भी शून्य मान नहीं मिलता है। आपके सभी अशक्त-फ़िल्टरिंग आवश्यकताओं के लिए एक स्वच्छ, पोर्टेबल, विश्वसनीय वन-लाइनर। यहां है प्रदर्शन है ।
इसी तरह, यदि आप खाली, झूठे और अशक्त तत्वों (शून्य को बनाए रखना) को हटाना चाहते हैं, तो ये चार तरीके काम करेंगे:
var_export(array_values(array_diff($array,[''])));
या
var_export(array_values(array_diff($array,[null])));
या
var_export(array_values(array_diff($array,[false])));
या
var_export(array_values(array_filter($array,'strlen')));
आउटपुट:
array (
0 => 'foo',
1 => 'bar',
2 => 0,
3 => '0',
)
अंत में, जो कोई भी भाषा निर्माण के सिंटैक्स को पसंद करता है, उसके लिए आप नए अनुक्रमणिकाओं को जारी करने के लिए एक नए सरणी में योग्यता मानों को धक्का दे सकते हैं।
$array=['foo', NULL, 'bar', 0, false, null, '0', ''];
$result = [];
foreach ($array as $value) {
if (strlen($value)) {
$result[] = $value;
}
}
var_export($result);