Одни люди ищут - причины, другие - возможности, выигрывают последние

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.

Ответить
Обязательные поля помечены *