আমি কতজন প্রোগ্রামার নির্দোষভাবে এই array_values(array_filter())
পদ্ধতিটি তাদের কোডগুলিতে অনুলিপি করে / কপি করেছেন তা নিয়ে আমি উদ্বিগ্ন - আমি আশ্চর্য হয়েছি যে অ্যারে_ফিলারের লোভের কারণে কতজন প্রোগ্রামার অজান্তেই সমস্যায় পড়েছিল। বা আরও খারাপ, কতজন লোক কখনই আবিষ্কার করতে পারেনি যে ফাংশনটি অ্যারে থেকে অনেকগুলি মান মুছে দেয় ...
আমি NULL
একটি অ্যারের থেকে উপাদানগুলি সরিয়ে ফেলা এবং কীগুলি পুনরায় সূচিকর্ম করার দ্বি-অংশ প্রক্রিয়াটির জন্য আরও ভাল বিকল্প উপস্থাপন করব ।
যাইহোক, প্রথমে, আমি অত্যন্ত লোভনীয় যে আমি লোভী প্রকৃতির উপর জোর দিয়েছি array_filter()
এবং কীভাবে এটি নিঃশব্দে আপনার প্রকল্পটি বানর করে ফেলতে পারে। এখানে এতে মিশ্র মান সহ একটি অ্যারে রয়েছে যা সমস্যাটি প্রকাশ করবে:
$array=['foo',NULL,'bar',0,false,null,'0',''];
বড় হাতের অক্ষর / লোয়ারকেস নির্বিশেষে নাল মানগুলি সরানো হবে।
তবে যখন আমরা অ্যারে_ভ্যালু () এবং অ্যারে_ফিল্টার () ব্যবহার করি তবে অ্যারেতে কী থাকে তা দেখুন :
array_values(array_filter($array));
আউটপুট অ্যারে ($ অ্যারে):
array (
0 => 'foo',
1 => 'bar'
)
// All empty, zero-ish, falsey values were removed too!!!
এখন আপনি আমার পদ্ধতির সাথে কী পান তা দেখুন যা নতুন ফিল্টার করা অ্যারে তৈরি করতে অ্যারে_ওয়াক () এবং ইস_নুল () ব্যবহার করে:
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);