PHP: как удалить элемент массива по значению
Часто случаются ситуации, когда нам в PHP необходимо удалить определенные значения из массива. Как правило, для этого чаще всего применяется перебор, через конструкцию for или фильтрация с помощью array_filter однако, почему-то часто забывается про возможности функции array_diff.
На самом деле, удаление значений из массива через array_diff выглядит более простым и лаконичным, к тому-же мы можем удалять (вычитать) из исходного массива сразу несколько массивов с необходимыми значениями, которые могут повторяться. К примеру, вот такой код:
<?php
$sourceArray = [ 2, 'a', 'b', 'c', 1, 2, 3 ];
$subtractedSource = array_diff($sourceArray, [ 'a' ], [ 2, 'c' ], [ '2' ]);
print_r($subtractedSource);
выдаст нам вот такой результат:
Array
(
[2] => b
[4] => 1
[6] => 3
)
Здесь стоит помнить, что решение об удалении значения используется после приведения сравниваемых значений к строке и тождественному сравнению, т.е. когда выполняется следующее условие (string) $value1 === (string) $value2. А так-же то, что ключи исходного массива остаются без изменения. Поэтому стоить понимать, что результатом вот такого примера:
<?php
$sourceArray = [
0 => true,
1 => 1,
2 => 'true',
3 => false,
4 => -1,
5 => 0,
6 => 'false'
];
$subtractedSource = array_diff($sourceArray, [ true ], [ '' ]);
var_dump($subtractedSource);
будет следующий вывод:
array(4) {
[2] =>
string(4) "true"
[4] =>
int(-1)
[5] =>
int(0)
[6] =>
string(5) "false"
}
Если вам такое поведение не по душе, вы можете написать собственную функцию сравнения (компаратор) и использовать ее через array_udiff.