Удалить элементы из плоского массива, если они найдены в столбце массива объектов

У меня есть одномерный массив значений в одном массиве, и мне нужно отфильтровать его по определенному свойству/столбцу в массиве объектов.

Мои входные массивы заполняются следующим кодом:

$array_one = array_keys(wc_get_account_menu_items());
$array_tow = $wpdb->get_results("SELECT pa_menu_endpoint FROM $phantom_menu WHERE pa_menu_from='pa_custom_tab'");

Пример данных для этих массивов:

$array_one = [
    'dashboard',
    'orders',
    'downloads',
    'edit-address',
    'woo-wallet',
    'edit-account',
    'customer-logout',
    'test',
    'testtest'
];

$array_tow = [
    (object) ['pa_menu_endpoint' => 'test'],
    (object) ['pa_menu_endpoint' => 'testtest']
];

Как я могу исключить значения «pa_menu_endpoint» из массива $array_one.

Желаемый отфильтрованный результат:

[
    'dashboard',
    'orders',
    'downloads',
    'edit-address',
    'woo-wallet',
    'edit-account',
    'customer-logout'
]

Это то, что вам нужно? php.net/manual/en/function.array-diff.php

Rob Eyre 30.03.2023 22:39

Пожалуйста, не могли бы вы сделать var_dump() для $array_one и $array_tow, чтобы убедиться, что они имеют одинаковую структуру

Rob Eyre 30.03.2023 22:41

Почти дубликат (который делает немного больше, чем требуется): PHP — поиск разницы между двумя многомерными массивами с разными структурами на основе одного значения

mickmackusa 30.03.2023 23:14

Также связано с инвертированной фильтрацией (пересечения вместо различий): Фильтровать массив объектов плоским массивом

mickmackusa 30.03.2023 23:48
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
4
4
87
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете отфильтровать плоский массив $array_tow по двумерному массиву array_one напрямую, используя array_udiff() и оператор объединения null при сравнении обратного вызова с резервным значением $array_tow, когда $a или $b не является объектом.

Код: (Демо)

var_export(
    array_udiff(
        $array_tow,
        $array_one,
        fn($a, $b) => ($a->pa_menu_endpoint ?? $a) <=> ($b->pa_menu_endpoint ?? $b)
    )
);

Возможно, проще для понимания будет предварительно сгладить массив фильтрации ($array_one) — это два вызова функций, но не настраиваемые обратные вызовы.

Код: (Демо)

var_export(
    array_diff(
        $array_tow,
        array_column($array_one, 'pa_menu_endpoint')
    )
);

Конечно, @micmackusa, я сделаю это. еще раз спасибо.

Behzad 31.03.2023 04:05

вот ты где 3v4l.org/aXWeg

Behzad 31.03.2023 04:56

@Beh смотрите мои комментарии к вашему сценарию: 3v4l.org/gRnt3

mickmackusa 31.03.2023 06:09

Другие вопросы по теме