Изтриване на елемент от масив в PHP
Има ли лесен начин за изтриване на елемент от масив с помощта на PHP, така че foreach ($array)
вече да не включва този елемент?
Мислех, че задаването на стойност null
ще го направи, но очевидно не работи.
2349
3
Съществуват различни начини за изтриване на елемент от масив, като някои от тях са по-полезни за някои специфични задачи, отколкото други.
Изтриване на един елемент от масив
Ако искате да изтриете само един елемент от масив, можете да използвате
\unset()
или алтернативно\array_splice()
.Също така, ако имате стойността и не знаете ключа за изтриване на елемента, можете да използвате
\array_search()
, за да получите ключа.\unset()
методОбърнете внимание, че когато използвате
\unset()
, ключовете на масива няма да се променят/реиндексират. Ако искате да преиндексирате ключовете, можете да използвате\array_values()
след\unset()
, което ще преобразува всички ключове в числени ключове, започващи от 0.Код
Изход
\array_splice()
методАко използвате
\array_splice()
, ключовете ще бъдат автоматично преиндексирани, но асоциативните ключове няма да се променят, за разлика от\array_values()
, който ще преобразува всички ключове в цифрови.Също така
\array_splice()
се нуждае от отместване, а не от ключ! като втори параметър.Код
Изход
array_splice()
и\unset()
приемат масива като референция, а това означава, че не искате да присвоявате върнатите стойности на тези функции обратно към масива.Изтриване на няколко елемента от масива
Ако искате да изтриете няколко елемента от масива и не искате да извиквате многократно
\unset()
или\array_splice()
, можете да използвате функциите\array_diff()
или\array_diff_key()
в зависимост от това дали знаете стойностите или ключовете на елементите, които искате да изтриете.\array_diff()
методАко знаете стойностите на елементите на масива, които искате да изтриете, тогава можете да използвате
\array_diff()
. Както и преди, при\unset()
няма да се променят/преиндексират ключовете на масива.Код
Изход
\array_diff_key()
методАко знаете ключовете на елементите, които искате да изтриете, тогава използвайте
\array_diff_key()
. Тук трябва да се уверите, че предавате ключовете като ключове във втория параметър, а не като стойности. В противен случай трябва да обърнете масива с\array_flip()
. И също така тук ключовете няма да се променят/реиндексират.Код
Изход
Също така, ако искате да използвате
\unset()
или\array_splice()
, за да изтриете няколко елемента с една и съща стойност, можете да използвате\array_keys()
, за да получите всички ключове за определена стойност и след това да изтриете всички елементи.Трябва да се отбележи, че
unset()
ще запази индексите непокътнати, което е това, което бихте очаквали, когато използвате низови индекси (масив като хештаблица), но може да бъде доста изненадващо, когато работите с масиви с целочислени индекси:Така че
array_splice()
може да се използва, ако искате да нормализирате целочислените си ключове. Друга възможност е да използватеarray_values()
следunset()
: