উত্তর:
এটি একটি সাধারণ ওয়ান-লাইনার দিয়ে সম্পন্ন করা যায়।
এই অ্যারে থাকা:
$arr = array('nice_item', 'remove_me', 'another_liked_item', 'remove_me_also');
আপনি করতে পারেন:
$arr = array_diff($arr, array('remove_me', 'remove_me_also'));
এবং এর মান $arr
হবে:
array('nice_item', 'another_liked_item')
আশা করি এটি সুন্দর কোড লিখতে সহায়তা করবে।
array_diff
ফাংশন অ ধ্বংসাত্মক যে এটা একটা নতুন বিন্যাস দেখায়।
$referenced = array_diff($referenced, $items_to_remove);
আমি একটি দ্বিতীয় উত্তর যুক্ত করছি। আমি এখানে বিভিন্ন পদ্ধতি চেষ্টা করার জন্য একটি দ্রুত বেঞ্চমার্কিং স্ক্রিপ্ট লিখেছি।
$arr = array(0 => 123456);
for($i = 1; $i < 500000; $i++) {
$arr[$i] = rand(0,PHP_INT_MAX);
}
shuffle($arr);
$arr2 = $arr;
$arr3 = $arr;
/**
* Method 1 - array_search()
*/
$start = microtime(true);
while(($key = array_search(123456,$arr)) !== false) {
unset($arr[$key]);
}
echo count($arr). ' left, in '.(microtime(true) - $start).' seconds<BR>';
/**
* Method 2 - basic loop
*/
$start = microtime(true);
foreach($arr2 as $k => $v) {
if ($v == 123456) {
unset($arr2[$k]);
}
}
echo count($arr2). 'left, in '.(microtime(true) - $start).' seconds<BR>';
/**
* Method 3 - array_keys() with search parameter
*/
$start = microtime(true);
$keys = array_keys($arr3,123456);
foreach($keys as $k) {
unset($arr3[$k]);
}
echo count($arr3). 'left, in '.(microtime(true) - $start).' seconds<BR>';
array_keys()
Specifiedচ্ছিক অনুসন্ধান প্যারামিটার নির্দিষ্ট করে তৃতীয় পদ্ধতিটি এখন পর্যন্ত সেরা পদ্ধতি বলে মনে হচ্ছে। আউটপুট উদাহরণ:
499999 left, in 0.090957164764404 seconds
499999left, in 0.43156313896179 seconds
499999left, in 0.028877019882202 seconds
এটি বিচার করে, আমি তখন যে সমাধানটি ব্যবহার করব তা হ'ল:
$keysToRemove = array_keys($items,$id);
foreach($keysToRemove as $k) {
unset($items[$k]);
}
কেমন:
if (($key = array_search($id, $items)) !== false) unset($items[$key]);
বা একাধিক মানের জন্য:
while(($key = array_search($id, $items)) !== false) {
unset($items[$key]);
}
এটি পাশাপাশি মূল ক্ষতি রোধ করতে পারে যা এর পার্শ্ব প্রতিক্রিয়া array_flip()
।
সবচেয়ে শক্তিশালী সমাধানটি ব্যবহার করা হবে array_filter
, যা আপনাকে নিজের ফিল্টারিং ফাংশনটি সংজ্ঞায়িত করতে দেয়।
তবে কেউ কেউ বলতে পারে এটি কিছুটা ওভারকিল, আপনার পরিস্থিতিতে ...
অ্যারেটি গর্ত করতে গিয়ে যে জিনিসটি আপনি চান না তা সরানোর জন্য
একটি সরল foreach
লুপ যথেষ্ট হওয়া উচিত।
আপনার ক্ষেত্রে এই জাতীয় কিছু সম্ভবত কৌশলটি করা উচিত:
foreach ($items as $key => $value) {
if ($value == $id) {
unset($items[$key]);
// If you know you only have one line to remove, you can decomment the next line, to stop looping
//break;
}
}
অ্যারে_সার্চ চেষ্টা করুন ()
array_keys()
চেয়ে ভাল পারফরম্যান্সের array_search()
জন্য মনে হচ্ছে ।
আপনার সমাধানগুলি কেবল তখনই কাজ করে যদি আপনার অ্যারেতে অনন্য মান থাকে
দেখা:
<?php
$trans = array("a" => 1, "b" => 1, "c" => 2);
$trans = array_flip($trans);
print_r($trans);
?>
যদি প্রয়োজন হয় তবে একটি লুপে অ্যারে_সার্কের সাথে আরও ভাল উপায় আনসেট করা হবে ।
function deleteValyeFromArray($array,$value)
{
foreach($array as $key=>$val)
{
if($val == $value)
{
unset($array[$key]);
}
}
return $array;
}
আপনি এই ক্রিয়াকলাপের জন্য অ্যারে_স্প্লাইস ফাংশনটি ব্যবহার করতে পারেন রেফ: অ্যারে_স্প্লাইস
array_splice($array, array_search(58, $array ), 1);