Видалення елементу з масиву в 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()
: