راه آسونی هست که یه عنصر رو از یه آرایه توی PHP حذف کنی تا توی foreach ($array) دیگه اون عنصر نباشه؟
فکر میکردم اگه مقدارشو null بذارم این کارو میکنه، ولی ظاهراً اینجوری نیست.
چند راه مختلف برای پاک کردن یه عنصر از آرایه هست که بعضیاشون برای بعضی کارهای خاص بیشتر به درد میخورن.
حذف کردن یه عنصر از آرایه
اگه بخوای فقط یه عنصر رو از آرایه حذف کنی، میتونی از unset() استفاده کنی و به طور جایگزین از array_splice() هم میتونی استفاده کنی.
بر اساس کلید یا بر اساس مقدار
اگه مقدار رو میدونی و کلیدش رو نمیدونی، میتونی از array_search() استفاده کنی تا کلید رو پیدا کنی. این فقط وقتی کار میکنه که عنصر بیشتر از یه بار تکرار نشده باشه، چون array_search() فقط اولین مورد رو برمیگردونه.
عبارت unset()
توجه: وقتی از unset() استفاده میکنی، کلیدهای آرایه تغییر نمیکنن. اگه بخوای کلیدها رو دوباره بهصورت عددی از 0 شروع کنی، میتونی بعد از unset() از array_values() استفاده کنی (آرایه همچنان یه لیست باقی میمونه).
مثال کد:
$array = [0 => "a", 1 => "b", 2 => "c"];
unset($array[1]);
خروجی مثال:
[
[0] => a
[2] => c
]
تابع array_splice()
اگه از array_splice() استفاده کنی، کلیدهای عددی بهطور خودکار دوباره ایندکس میشن، ولی کلیدهای انجمنی (رشتهای) تغییر نمیکنن — برخلاف array_values() بعد از unset() که تمام کلیدها رو به کلیدهای عددی تبدیل میکنه.
توجه: array_splice() به جای کلید، به offset نیاز داره که به عنوان پارامتر دوم استفاده میشه؛
offset = array_flip(array_keys(array))[key]
مثال:
$array = [0 => "a", 1 => "b", 2 => "c"];
array_splice($array, 1, 1);
خروجی مثال:
[
[0] => a
[1] => c
]
تابع array_splice() مثل unset()، آرایه رو به صورت مرجع میگیره. نیازی نیست که مقادیر برگشتی رو دوباره به آرایه نسبت بدی.
حذف کردن چندین عنصر از آرایه
اگه بخوای چندین عنصر رو از آرایه حذف کنی و نمیخوای چندین بار از unset() یا array_splice() استفاده کنی، میتونی از توابع array_diff() یا array_diff_key() استفاده کنی، بسته به این که مقادیر یا کلیدهای عناصر مورد نظر رو برای حذف از آرایه میدونی.
تابع array_diff()
اگه مقادیر عناصر آرایهای که میخوای حذف کنی رو بدونی، میتونی از array_diff() استفاده کنی. مثل unset()، این تابع کلیدهای آرایه رو تغییر نمیده.
مثال کد:
$array = [0 => "a", 1 => "b", 2 => "c", 3 => "c"];
$array = array_diff($array, ["a", "c"]);
خروجی مثال:
[
[1] => b
]
تابع array_diff_key()
اگه کلیدهای عناصر رو که میخوای حذف کنی میدونی، باید از array_diff_key() استفاده کنی. باید اطمینان حاصل کنی که کلیدها رو به عنوان کلیدها در پارامتر دوم بفرستی و نه به عنوان مقادیر. کلیدها دوباره ایندکس نمیشن.
مثال کد:
$array = [0 => "a", 1 => "b", 2 => "c"];
$array = array_diff_key($array, [0 => "xy", "2" => "xy"]);
خروجی مثال:
[
[1] => b
]
اگه بخوای از unset() یا array_splice() برای حذف چندین عنصر با مقدار مشابه استفاده کنی، میتونی از array_keys() برای گرفتن تمام کلیدها برای یه مقدار خاص استفاده کنی و بعد همه عناصر رو حذف کنی.
تابع array_filter()
اگه بخوای تمام عناصر با مقدار خاصی رو از آرایه حذف کنی، میتونی از array_filter() استفاده کنی.
مثال کد:
$array = [0 => "a", 1 => "b", 2 => "c"];
$array = array_filter($array, static function ($element) {
return $element !== "b";
});
خروجی مثال:
[
[0] => a
[2] => c
]