পিএইচপি অ্যারে মান দ্বারা মুছে ফেলুন (কী নয়)


885

আমার পিএইচপি অ্যারে রয়েছে নিম্নরূপ:

$messages = [312, 401, 1599, 3, ...];

আমি মানটি যুক্ত উপাদানটি মুছতে চাই $del_val(উদাহরণস্বরূপ $del_val=401), তবে আমি এর কী জানি না। এটি সাহায্য করতে পারে: প্রতিটি মান কেবল একবারে থাকতে পারে

এই টাস্কটি সম্পাদন করার জন্য আমি সর্বাধিক সন্ধান করছি please


1
@ অ্যাডাম স্ট্রডউইক তবে আপনার যদি এই অ্যারেটিতে অনেকগুলি মুছে ফেলা হয় তবে একবার এটি পুনরাবৃত্তি করা এবং এর কীটিকে মান হিসাবে তৈরি করা ভাল?
dzona


উত্তর:


1565

ব্যবহার array_search()এবং unset, নিম্নলিখিত চেষ্টা করুন:

if (($key = array_search($del_val, $messages)) !== false) {
    unset($messages[$key]);
}

array_search()এটি যে উপাদানটি খুঁজে পায় তার কীটি প্রদান করে, যা মূল অ্যারেটি ব্যবহার করে সেই উপাদানটি সরানোর জন্য ব্যবহার করা যেতে পারে unset()। এটি FALSEব্যর্থতায় ফিরে আসবে , তবে এটি সাফল্যের ক্ষেত্রে একটি ভুয়া- y মান প্রদান করতে পারে (আপনার কী 0উদাহরণস্বরূপ হতে পারে ), এজন্যই কঠোর তুলনা !==অপারেটর ব্যবহার করা হয়।

if()বিবৃতি চেক করবে কিনা array_search()একটি মান ফিরে, এবং যদি তা শুধুমাত্র একটি কর্ম সঞ্চালন করা হবে।


14
$ বার্তা = অ্যারে_ডিফ ($ বার্তা, অ্যারে ($ দেল_ওয়াল)) খুব কাজ করবে? পারফরম্যান্সে এটি কি আরও ভাল হবে?
অ্যাডাম স্ট্রডউইক

9
@ অ্যাডাম কেন এটি পরীক্ষা করে দেখছেন না? আমার অনুভূতি যে array_diff()যেমন এর ধীর হবে দুই তুলনা অ্যারে, সহজভাবে মাধ্যমে অনুসন্ধান না এক মত array_search()
বোজাঙ্গলেস

22
এটি বৈধ হলেও, আপনার মত বিবৃতিতে মান নির্ধারণ করা এড়ানো উচিত। এটি আপনাকে কেবল সমস্যায় ফেলবে।
অ্যাডলাউসন

17
যদি $keyহয় 0?
ইভান

16
আপনি যে মানটির জন্য অনুসন্ধান করছেন তাতে যদি একটি কী 0বা অন্য কোনও মিথ্যা মান থাকে তবে এটি মানটি সেট করবে না এবং আপনার কোড কাজ করবে না। আপনার পরীক্ষা করা উচিত $key === false। (edit- আপনি এটা পেয়েছেন)
ইভান

671

ভাল, অ্যারের থেকে একটি উপাদান মুছে ফেলা মূলত একটি উপাদান সঙ্গে পার্থক্য সেট ।

array_diff( [312, 401, 15, 401, 3], [401] ) // removing 401 returns [312, 15, 3]

এটি দুর্দান্তভাবে জেনারেলাইজ করে, আপনি চাইলে একই সময়ে আপনার পছন্দ মতো অনেকগুলি উপাদান সরিয়ে ফেলতে পারেন।

অস্বীকৃতি: নোট করুন যে আমার দ্রবণটি অ্যারেটির একটি নতুন অনুলিপি তৈরি করে এবং পুরানোটিকে গ্রহণযোগ্য উত্তরের বিপরীতে অক্ষত রাখে যা পরিবর্তিত হয়। আপনার যা প্রয়োজন তা চয়ন করুন।


32
এটি কেবল এমন অবজেক্টের জন্য কাজ করে যা স্ট্রিংয়ে রূপান্তরিত হতে পারে
nischayn22

7
বলার জন্য আমি 'পার্স ত্রুটি' পেয়ে যাচ্ছি বলে মনে হচ্ছে [$element], array($element)পরিবর্তে আমি ব্যবহার করেছি । কোনও বড় কথা নয়, তবে কেবল একই রকম সমস্যা রয়েছে এমন কাউকে জানতে চেয়েছিলেন যে তারা একা নয়
Angad

8
অবশ্যই, আমি ধরে নিয়েছি পিএইচপি 5.4 এখন পুরানো স্বরলিপি বাদ দেওয়ার পক্ষে সংখ্যাগরিষ্ঠ। মন্তব্যের জন্য ধন্যবাদ।
রোক ক্রালজ

22
এটি লক্ষণীয় যে কোনও কারণে এটির সমতা শর্ত হিসাবে array_diffব্যবহার করে (string) $elem1 === (string) $elem2, $elem1 === $elem2আপনি যেমন আশা করেন তেমন নয়। @ নিশায়েন 22 দ্বারা চিহ্নিত ইস্যুটি এর পরিণতি। আপনি যদি কোনও ইউটিলিটি ফাংশন হিসাবে কিছু ব্যবহার করতে চান যা স্বেচ্ছাসেবী উপাদানগুলির অ্যারেগুলির জন্য কাজ করবে (যা বস্তু হতে পারে), বোজাঙ্গলের উত্তর এই কারণেই আরও ভাল হতে পারে।
মার্ক আমেরিকা

4
এছাড়াও নোট করুন যে এই পদ্ধতিটি প্রতিটি যুক্তির জন্য অভ্যন্তরীণভাবে বাছাই করে array_diff()এবং এভাবে ও (এন) থেকে ও (এন এলজি এন) পর্যন্ত রানটাইমকে নাক করে দেয়।
জ্যাক

115

একটি আকর্ষণীয় উপায় হ'ল ব্যবহার করে array_keys():

foreach (array_keys($messages, 401, true) as $key) {
    unset($messages[$key]);
}

array_keys()ফাংশন (তুলনা জন্য অর্থাত ব্যবহার ===) একটি নির্দিষ্ট মানের জন্য কিনা কঠোর পরীক্ষণ প্রয়োজন বোধ করা হয় শুধুমাত্র চাবি ফেরত দিতে দুটি অতিরিক্ত প্যারামিটার নেয়।

এটি একই মান সহ (যেমন [1, 2, 3, 3, 4]) একাধিক অ্যারে আইটেমগুলিও সরিয়ে ফেলতে পারে ।


3
@ ব্লাস্টারালফ্রেডΨ একটি রৈখিক অনুসন্ধান হ'ল ও (এন); আমি নিশ্চিত নই আপনি কেন মনে করছেন এটি সমস্যা problem
জ্যাক

1
হ্যাঁ, এটি একাধিক অ্যারে আইটেম / কীগুলি নির্বাচন করার জন্য কার্যকর।
ওকি এরি রিনালাদি

3
এটি অ্যারেগুলির জন্য সর্বোত্তম যা এতে সমস্ত অনন্য মান থাকতে পারে না।
ডেরোকরিয়ান

সমস্যাটি হ'ল এটি অনস্কৃত কীগুলির সূচকটি ছেড়ে দেয়: [0] - এ, [2] - বি ([1] চলে গেছে তবে অ্যারে এখনও এটি মিস করে না)
রোডনিকো

3
@ রডনিকো যে ক্ষেত্রে আপনারও প্রয়োজন হবে array_values(); বাকি কীগুলি এখনও একই ক্রমে রয়েছে যদিও প্রযুক্তিগতভাবে এটি "
অরসোর্টড

55

আপনি যদি নিশ্চিতরূপে জানেন যে আপনার অ্যারেতে সেই মানটির সাথে কেবল একটি উপাদান থাকবে তবে আপনি এটি করতে পারেন

$key = array_search($del_val, $array);
if (false !== $key) {
    unset($array[$key]);
}

তবে, যদি আপনার মানটি আপনার অ্যারেতে একাধিকবার ঘটে থাকে তবে আপনি এটি করতে পারেন

$array = array_filter($array, function($e) use ($del_val) {
    return ($e !== $del_val);
});

নোট: দ্বিতীয় বিকল্প শুধুমাত্র সঙ্গে জন্য PHP5.3 + + কাজ বন্ধ


41
$fields = array_flip($fields);
unset($fields['myvalue']);
$fields = array_flip($fields);

11
এটি কেবল তখনই কাজ করে যখন আপনার অ্যারেতে আপনি মুছে ফেলার চেষ্টা করছেন সেগুলি ছাড়া অন্য সদৃশ মানগুলি নেই।
jberculo

2
@ জবারকুলো এবং মাঝে মাঝে আপনার ঠিক যেমনটি প্রয়োজন হয় তা কিছু ক্ষেত্রে এটি আমাকে
অনন্যভাবে

সম্ভবত, তবে আমি বিশেষত এটি করার জন্য ডিজাইন করা ফাংশনগুলি ব্যবহার করব, মূলত ব্যবহৃত কোনও ফাংশনের ভাগ্যবান পার্শ্ব প্রতিক্রিয়া না হয়ে যা মূলত ব্যবহৃত হয় এবং অন্য কোনও কিছুর উদ্দেশ্যে intended এটি আপনার কোডকে কম স্বচ্ছ করে তুলবে।
jberculo

বার্তায় উল্লেখ করা হয়েছে যে "প্রতিটি মান কেবলমাত্র একবার সেখানে থাকতে পারে" এটির কাজ করা উচিত। পোস্টারটি স্মাই ভেরিয়েবলের নামটি ব্যবহার করে কিছুটা ব্যাখ্যা দিলে ভাল হত
রাতজে

2
নির্বাচিত সমাধানের তুলনায় স্পষ্টতই এটি দ্রুততম, আমি ছোট বেঞ্চমার্কিং করেছি।
এএমবি

28

নিম্নলিখিত কোডটি দেখুন:

$arr = array('nice_item', 'remove_me', 'another_liked_item', 'remove_me_also');

আপনি করতে পারেন:

$arr = array_diff($arr, array('remove_me', 'remove_me_also'));

এবং এটি আপনাকে এই অ্যারে পাবেন:

array('nice_item', 'another_liked_item')

1
সহযোগী অ্যারেগুলির জন্য আপনাকে অ্যারে_ডিফ_সোক ()
কোডটি

5
এটি এই উত্তর চেয়ে আলাদা কীভাবে ?
এলোমেলো_ ব্যবহারকারী_নাম

26

সেরা উপায় array_splice

array_splice($array, array_search(58, $array ), 1);

বেস্টের কারণ এখানে http://www.programmerinterview.com/index.php/php-questions/how-to-delete-an-element-from-an-array-in-php/ এ রয়েছে


4
এই মিশুক অ্যারে এবং অ্যারে আছে তাদের কি, যেমন ফাঁক কাজ করবে না [1, 2, 4 => 3]
জ্যাক

দুঃখিত, এটি কাজ করবে। দয়া করে আমি সরবরাহ করা নিবন্ধটি লিঙ্কটি পড়ুন
এয়ারি

4
এটা হবে না। আমার উপরের মন্তব্যের অ্যারে বিবেচনা করুন; আমি মানটি অপসারণ করতে আপনার কোড ব্যবহার করার পরে 3অ্যারে হবে [1, 2, 3]; অন্য কথায়, মানটি সরানো হয়নি। স্পষ্টতই, আমি বলছি না যে এটি সমস্ত পরিস্থিতিতে ব্যর্থ হয়, কেবল এটিই।
Ja͢ck

1
অ্যারে_স্প্লাইস সেরা পদ্ধতি, আনসেট মুছে ফেলার পরে অ্যারে সূচকগুলি সামঞ্জস্য করবে না
রাঘু

21

বা সহজভাবে, ম্যানুয়াল উপায়:

foreach ($array as $key => $value){
    if ($value == $target_value) {
        unset($array[$key]);
    }
}

এটি এগুলির মধ্যে নিরাপদ কারণ আপনার অ্যারেতে আপনার সম্পূর্ণ নিয়ন্ত্রণ রয়েছে


1
array_splice()পরিবর্তে ব্যবহার unset()করলে অ্যারে সূচকগুলিও পুনরায় অর্ডার হবে, যা এই ক্ষেত্রে আরও ভাল হতে পারে।
ড্যানিয়েল অরল্যান্ডো

20

নিম্নলিখিত কোড দ্বারা, পুনরাবৃত্তি মানগুলি $ বার্তা থেকে সরানো হবে।

$messages = array_diff($messages, array(401));


3
আপ-ভোট দিয়েছে। এটি ইতিমধ্যে অন্যান্য উত্তরের মধ্যে ছিল তবে আপনি নিজের মতো করে এটিকে সহজ রেখেই এটি সেরা বলছেন। উত্তরটি কেবল "অ্যারে_ডিফ"
--বারট

1
দেখতে সহজ দেখায় তবে এটি জটিলতা ও (এন) থেকে ও (এন এলজি এন) এ পরিবর্তন করে। সুতরাং, এটি আসলে আরও জটিল;)
ক্রিজিসটফ প্রিজগোদা

20

আপনার যদি পিএইচপি 5.3+থাকে তবে একটি লাইন কোড রয়েছে:

$array = array_filter($array, function ($i) use ($value) { return $i !== $value; }); 

তুমি কি নিশ্চিত? এই $value$value
বন্ধটির

@ ক্যাল_বি, আমি উদাহরণটি আপডেট করেছি। এছাড়াও রেফ এখানে: php.net/manual/en/funitions.anonymous.php
ডেভিড লিন

3
আপনি যদি এই "ওয়ান লাইন কোড" কল করেন তবে আপনিও আপনার পুরো কোডবেসটি এক লাইনে লিখতে পারেন
মিলান সিমেক

16
function array_remove_by_value($array, $value)
{
    return array_values(array_diff($array, array($value)));
}

$array = array(312, 401, 1599, 3);

$newarray = array_remove_by_value($array, 401);

print_r($newarray);

আউটপুট

Array ( [0] => 312 [1] => 1599 [2] => 3 )


2
আমি নিশ্চিত না যে এটি দ্রুত হয় কারণ এই সমাধানটিতে একাধিক ফাংশন কল জড়িত।
জুলিয়ান পাওলো ডায়াগ

13

আপনি করতে পারেন:

unset($messages[array_flip($messages)['401']]);

ব্যাখ্যা : 401অ্যারে উল্টানোর পরে কী রয়েছে এমন উপাদানটি মুছুন ।


আপনি রাষ্ট্রকে রক্ষা করতে চাইলে আপনাকে খুব সাবধানতা অবলম্বন করতে হবে। কারণ ভবিষ্যতের সমস্ত কোডের কীগুলির পরিবর্তে মান থাকতে হবে।
সাদলুলু

1
@saadlulu $ বার্তাগুলি অ্যারে উল্টানো হবে না যেহেতু অ্যারে_ফ্লিপ () মূল অ্যারেটিকে প্রভাবিত করে না, সুতরাং পূর্ববর্তী লাইনের প্রয়োগের পরে প্রাপ্ত ফলাফলগুলি অযাচিত ফলাফল বাদ দেওয়া ছাড়া একই হবে।
কুরেশি

2
নিশ্চিত না যে এটি সঠিক কিনা, যদি মান সহ বেশ কয়েকটি উপাদান থাকে তবে কী হবে 401?
জিপ্প

এটি কীগুলি এখনও সংরক্ষণ করবে।
স্যাজাবলস পল


6

আন্ডারস্কোর যুক্তিযুক্ত ধার নিয়েছে। জেএস _.আরেক্ট করুন এবং দুটি ফাংশন তৈরি করেছেন (লোকেরা ফাংশন পছন্দ করে !!)

অ্যারে_রেজেক্ট_ভ্যালু: এই ফাংশনটি নির্দিষ্ট করে দেওয়া মানটিকে কেবল প্রত্যাখ্যান করছে (পিএইচপি 4,5,7 এর জন্যও কাজ করে)

function array_reject_value(array &$arrayToFilter, $deleteValue) {
    $filteredArray = array();

    foreach ($arrayToFilter as $key => $value) {
        if ($value !== $deleteValue) {
            $filteredArray[] = $value;
        }
    }

    return $filteredArray;
}

অ্যারে_রেজেক্ট: এই ফাংশনটি কেবল কলযোগ্য পদ্ধতিটিকে প্রত্যাখ্যান করছে (পিএইচপি> = 5.3 এর জন্য কাজ করে)

function array_reject(array &$arrayToFilter, callable $rejectCallback) {

    $filteredArray = array();

    foreach ($arrayToFilter as $key => $value) {
        if (!$rejectCallback($value, $key)) {
            $filteredArray[] = $value;
        }
    }

    return $filteredArray;
}

সুতরাং আমাদের বর্তমান উদাহরণে আমরা উপরের ফাংশনগুলি নিম্নরূপ ব্যবহার করতে পারি:

$messages = [312, 401, 1599, 3, 6];
$messages = array_reject_value($messages, 401);

বা আরও ভাল: (এটি আমাদের অ্যারে_ ফিল্টারটির মতো ব্যবহারের জন্য আরও ভাল সিনট্যাক্স দেয় )

$messages = [312, 401, 1599, 3, 6];
$messages = array_reject($messages, function ($value) {
    return $value === 401;
});

উপরেরগুলি আরও জটিল স্টাফগুলির জন্য ব্যবহার করা যেতে পারে যেমন ধরা যাক যে আমরা 401 এর চেয়ে বেশি বা সমান সমস্ত মান সরিয়ে দিতে চাই আমরা কেবল এটি করতে পারি:

$messages = [312, 401, 1599, 3, 6];
$greaterOrEqualThan = 401;
$messages = array_reject($messages, function ($value) use $greaterOrEqualThan {
    return $value >= $greaterOrEqualThan;
});

1
এই পুনর্নবীকরণ ফিল্টার না? php.net/manual/en/function.array-filter.php
রিচার্ড

হ্যাঁ সত্যই। যেহেতু আমি ইতিমধ্যে পোস্টে বলছি "বা আরও ভাল: (এটি আমাদের অ্যারে_ ফিল্টারটির মতো ব্যবহার করার জন্য আরও ভাল সিনট্যাক্স দেয়)"। কখনও কখনও আপনার কেবলমাত্র ফাংশনটিকে আন্ডারস্কোর হিসাবে প্রত্যাখ্যান করা প্রয়োজন এবং এটি সত্যই ফিল্টারটির ঠিক বিপরীত (এবং আপনার এটি যতটা সম্ভব কম কোডের সাথে পাওয়া দরকার)। এটিই ফাংশনগুলি করছে। মানগুলি প্রত্যাখ্যান করার এটি একটি সহজ উপায়।
জন স্কৌম্বুরডিস

6
$array = array("apple", "banana",'mango');
$array = array_filter($array, function($v) { return $v != "apple"; });

এটি ব্যবহার করে দেখুন, মান দ্বারা উপাদানটি সরিয়ে ফেলার এটি সেরা এবং দ্রুততম উপায়


5

@ বোজ্যাংলস উত্তরগুলি আমাকে সাহায্য করেছিল। ধন্যবাদ.

আমার ক্ষেত্রে, অ্যারেটি মিশুক বা নাও হতে পারে, তাই আমি নিম্নলিখিত ফাংশনটি যুক্ত করেছি

function test($value, $tab) {

 if(($key = array_search($value, $tab)) !== false) {
    unset($tab[$key]); return true;

 } else if (array_key_exists($value, $tab)){
        unset($tab[$value]); return true;

 } else {
    return false; // the $value is not in the array $tab
 }

}

শুভেচ্ছা সহ



4

গৃহীত উত্তর অ্যারেটিকে এসোসিয়েটিভ অ্যারেতে রূপান্তর করে, সুতরাং, আপনি যদি স্বীকৃত উত্তরের সাথে এটি অ-সমিতিগত অ্যারে হিসাবে রাখতে চান তবে আপনাকেও এটি ব্যবহার করতে হতে পারে array_values

if(($key = array_search($del_val, $messages)) !== false) {
    unset($messages[$key]);
    $arr = array_values($messages);
}

রেফারেন্স এখানে


4

আপনার প্রয়োজন অনুসারে " প্রতিটি মান কেবল একবারের জন্য থাকতে পারে " যদি আপনি কেবল আপনার অ্যারেতে অনন্য মূল্যবোধ রাখতে আগ্রহী হন তবে array_unique()আপনি যা খুঁজছেন তা হতে পারে।

ইনপুট:

$input = array(4, "4", "3", 4, 3, "3");
$result = array_unique($input);
var_dump($result);

ফলাফল:

array(2) {
  [0] => int(4)
  [2] => string(1) "3"
}

4

যদি মানগুলি আপনি মুছতে চান তবে এটি অ্যারেতে থাকতে পারে বা করতে পারে। অ্যারে_ডিফ ফাংশনটি ব্যবহার করুন । এই জাতীয় জিনিস জন্য দুর্দান্ত কাজ বলে মনে হচ্ছে।

array_diff

$arrayWithValuesRemoved = array_diff($arrayOfData, $arrayOfValuesToRemove);

1
এটি এই উত্তর চেয়ে আলাদা কীভাবে ?
এলোমেলো_ ব্যবহারকারী_নাম

4

আমি জানি এটি মোটেই দক্ষ নয় তবে সহজ, স্বজ্ঞাত এবং পড়া সহজ।
সুতরাং যদি কেউ এমন কোনও অভিনব সমাধানের সন্ধান করছেন যা আরও মান, বা আরও নির্দিষ্ট শর্তের সাথে কাজ করার জন্য বাড়ানো যেতে পারে .. এখানে একটি সহজ কোড:

$result = array();
$del_value = 401;
//$del_values = array(... all the values you don`t wont);

foreach($arr as $key =>$value){
    if ($value !== $del_value){
        $result[$key] = $value;
    }

    //if(!in_array($value, $del_values)){
    //    $result[$key] = $value;
    //}

    //if($this->validete($value)){
    //      $result[$key] = $value;
    //}
}

return $result

4

সাথে অ্যারে কীটি পান array_search()


2
আমি কীভাবে মানটি মুছব এবং কেবলমাত্র যদি অ্যারে_সার্কের সাথে এটি খুঁজে পাই?
অ্যাডাম স্ট্রডউইক

3
$ কে = অ্যারে_সার্চ ($ সূঁচ, $ খড়ের কাঁটা, সত্য); যদি ($ কে! == মিথ্যা) {আনসেট করা ($ খড়ের কাঁটা [$ কে]); }
ইভান

3

আপনি যদি এর কীটি না জানেন তবে এর অর্থ এটি কোনও বিষয় নয়।

আপনি মানটি কী হিসাবে রাখতে পারেন, এর অর্থ এটি তাত্ক্ষণিকভাবে মানটি পেয়ে যাবে। বারবার সমস্ত উপাদানগুলিতে অনুসন্ধান করা ব্যবহার করা ভাল।

$messages=array();   
$messages[312] = 312;    
$messages[401] = 401;   
$messages[1599] = 1599;   
$messages[3] = 3;    

unset($messages[3]); // no search needed

কেবলমাত্র সেই বস্তুর জন্য কাজ করে যা স্ট্রিতে রূপান্তরিত হতে পারে।
এমিল বার্গারন

2

orঅপারেটরটি ব্যবহার করে একটি ওয়ান-লাইনার :

($key = array_search($del_val, $messages)) !== false or unset($messages[$key]);

2

আপনি এই ইউআরএল উল্লেখ করতে পারেন : ফাংশন জন্য

array-diff-key()

<?php
$array1 = array('blue'  => 1, 'red'  => 2, 'green'  => 3, 'purple' => 4);
$array2 = array('green' => 5, 'blue' => 6, 'yellow' => 7, 'cyan'   => 8);

var_dump(array_diff_key($array1, $array2));
?>

তারপরে আউটপুট হওয়া উচিত,

array(2) {
  ["red"]=>
  int(2)
  ["purple"]=>
  int(4)
}

1

অ্যারের মান মুছতে অন্য ধারণা, অ্যারে_ডিফ ব্যবহার করুন। আমি যদি চাই

$my_array = array(1=>"a", "second_value"=>"b", 3=>"c", "d");
$new_array_without_value_c = array_diff($my_array, array("c"));

(ডক: http://php.net/manual/fr/function.array-diff.php )


3
এটি এই উত্তর চেয়ে আলাদা কীভাবে ?
এলোমেলো_ ব্যবহারকারীর_নাম

1

আমি মনে করি সহজ উপায় হ'ল ফোরচ লুপের সাহায্যে কোনও ফাংশন ব্যবহার করা:

//This functions deletes the elements of an array $original that are equivalent to the value $del_val
//The function works by reference, which means that the actual array used as parameter will be modified.

function delete_value(&$original, $del_val)
{
    //make a copy of the original, to avoid problems of modifying an array that is being currently iterated through
    $copy = $original;
    foreach ($original as $key => $value)
    {
        //for each value evaluate if it is equivalent to the one to be deleted, and if it is capture its key name.
        if($del_val === $value) $del_key[] = $key;
    };
    //If there was a value found, delete all its instances
    if($del_key !== null)
    {
        foreach ($del_key as $dk_i)
        {
            unset($original[$dk_i]);
        };
        //optional reordering of the keys. WARNING: only use it with arrays with numeric indexes!
        /*
        $copy = $original;
        $original = array();
        foreach ($copy as $value) {
            $original[] = $value;
        };
        */
        //the value was found and deleted
        return true;
    };
    //The value was not found, nothing was deleted
    return false;
};

$original = array(0,1,2,3,4,5,6,7,4);
$del_val = 4;
var_dump($original);
delete_value($original, $del_val);
var_dump($original);

আউটপুট হবে:

array(9) {
  [0]=>
  int(0)
  [1]=>
  int(1)
  [2]=>
  int(2)
  [3]=>
  int(3)
  [4]=>
  int(4)
  [5]=>
  int(5)
  [6]=>
  int(6)
  [7]=>
  int(7)
  [8]=>
  int(4)
}
array(7) {
  [0]=>
  int(0)
  [1]=>
  int(1)
  [2]=>
  int(2)
  [3]=>
  int(3)
  [5]=>
  int(5)
  [6]=>
  int(6)
  [7]=>
  int(7)
}

1

পিএইচপি 7.4 সহ তীর ফাংশন ব্যবহার করে:

$messages = array_filter($messages, fn ($m) => $m != $del_val);

এটিকে একটি অ-অ্যাসোসিয়েটিভ অ্যারে রাখার জন্য এটি দিয়ে array_values():

$messages = array_values(array_filter($messages, fn ($m) => $m != $del_val));
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.