Как удалить элемент в массиве (PHP)
Существует несколько способов удалить определенный элемент (значение) в массиве. Допустим, у нас имеется следующий массив:
1 2 |
<?php $arr = array(1,2,3,4,5); |
Нам требуется удалить элемент со значением 3. Если мы заранее знаем его ключ, то можно воспользоваться функцией unset():
1 2 |
<?php unset($arr[2]); |
Однако, использовать такой способ возможно не всегда, т.к. мы можем не знать, под каким числовым индексом будет находиться нужное нам значение. Чаще всего элементы массива формируются динамически, поэтому нам нужен более гибкий способ.
В динамически формируемом массиве удалить элемент можно различными способами. Рассмотрим для начала наиболее «примитивный»:
1 2 3 4 5 6 7 8 |
<?php $arr = array(1,2,3,4,5); $deleteValue = 3; foreach($arr as $key => $value) { if ($deleteValue == $value) { unset($arr[$key]); } } |
Здесь мы перебираем весь массив с помощью конструкции foreach() и сравниваем каждый элемент массива с искомым, который нужно удалить. Если совпадение есть, то удаляем данный элемент, используя ключ $key.
Попробуем сделать этот код покороче с помощью функции in_array():
1 2 3 4 5 6 |
<?php $arr = array(1,2,3,4,5); $deleteValue = 3; if (in_array($deleteValue, $arr)) { unset($arr[$key]); } |
Если нужное значение не будет найдено в массиве, то функция вернет false, в противном случае — true (и отработается код, который находится внутри конструкции if.
Ну и, наконец, еще один вариант с использованием функции array_diff() поможет еще сократить код:
1 2 3 4 |
<?php $arr = array(1,2,3,4,5); $deleteValue = 3; array_diff($privileges, [$deleteValue]) |
array_diff() вернет новый массив с элементами, которых нет одновременно в обоих массивах (исходном и массиве с искомым значением, который мы создали — [$deleteValue]).
Категория: PHP-скрипты