Перейти к основному содержимому

array_filter

Описание

Возвращает значения из массива, которые соответствуют заданному фильтру.

Эта функция представлена в следующих двух формах. Использование лямбда-выражений позволяет более гибко фильтровать массивы. Для получения дополнительной информации о лямбда-функциях см. Lambda expression. Эта функция поддерживается начиная с версии 1.5.0.

Синтаксис

array_filter(array, array<bool>)
array_filter(lambda_function, arr1,arr2...)
  • array_filter(array, array<bool>)

    Возвращает значения из массива, которые соответствуют array<bool>.

  • array_filter(lambda_function, arr1,arr2...)

    Возвращает значения из массива, которые соответствуют лямбда-функции.

Параметры

array: массив для фильтрации значений.

array<bool>: выражение, используемое для фильтрации значений.

lambda_function: лямбда-функция, используемая для фильтрации значений.

Примечания по использованию

  • Два входных параметра array_filter(array, array<bool>) должны быть ARRAY, и выражение фильтра может вычисляться как array<bool>.
  • Лямбда-функция в array_filter(lambda_function, arr1,arr2...) следует примечаниям по использованию в array_map().
  • Если входной массив равен null, возвращается null. Если массив фильтра равен null, возвращается пустой массив.

Примеры

  • Примеры без использования лямбда-функций

    -- Все элементы в массиве соответствуют фильтру.
    select array_filter([1,2,3],[1,1,1]);
    +------------------------------------+
    | array_filter([1, 2, 3], [1, 1, 1]) |
    +------------------------------------+
    | [1,2,3] |
    +------------------------------------+
    1 row in set (0.01 sec)

    -- Фильтр равен null и возвращается пустой массив.
    select array_filter([1,2,3],null);
    +-------------------------------+
    | array_filter([1, 2, 3], NULL) |
    +-------------------------------+
    | [] |
    +-------------------------------+
    1 row in set (0.01 sec)

    -- Входной массив равен null, возвращается null.
    select array_filter(null,[1]);
    +-------------------------+
    | array_filter(NULL, [1]) |
    +-------------------------+
    | NULL |
    +-------------------------+

    -- И входной массив, и фильтр равны null. Возвращается null.
    select array_filter(null,null);
    +--------------------------+
    | array_filter(NULL, NULL) |
    +--------------------------+
    | NULL |
    +--------------------------+
    1 row in set (0.01 sec)

    -- Фильтр содержит элемент null и возвращается пустой массив.
    select array_filter([1,2,3],[null]);
    +---------------------------------+
    | array_filter([1, 2, 3], [NULL]) |
    +---------------------------------+
    | [] |
    +---------------------------------+
    1 row in set (0.01 sec)

    -- Фильтр содержит два элемента null и возвращается пустой массив.
    select array_filter([1,2,3],[null,null]);
    +---------------------------------------+
    | array_filter([1, 2, 3], [NULL, NULL]) |
    +---------------------------------------+
    | [] |
    +---------------------------------------+
    1 row in set (0.00 sec)

    -- Только один элемент соответствует фильтру.
    select array_filter([1,2,3],[null,1,0]);
    +---------------------------------------+
    | array_filter([1, 2, 3], [NULL, 1, 0]) |
    +---------------------------------------+
    | [2] |
    +---------------------------------------+
    1 row in set (0.00 sec)
  • Примеры с использованием лямбда-функций

      -- Возвращает элементы в x, которые меньше элементов в y.
    select array_filter((x,y) -> x < y, [1,2,null], [4,5,6]);
    +--------------------------------------------------------+
    | array_filter((x, y) -> x < y, [1, 2, NULL], [4, 5, 6]) |
    +--------------------------------------------------------+
    | [1,2] |
    +--------------------------------------------------------+