У меня есть одномерный массив значений в одном массиве, и мне нужно отфильтровать его по определенному свойству/столбцу в массиве объектов.
Мои входные массивы заполняются следующим кодом:
$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'
]
Пожалуйста, не могли бы вы сделать var_dump() для $array_one и $array_tow, чтобы убедиться, что они имеют одинаковую структуру
Почти дубликат (который делает немного больше, чем требуется): PHP — поиск разницы между двумя многомерными массивами с разными структурами на основе одного значения
Также связано с инвертированной фильтрацией (пересечения вместо различий): Фильтровать массив объектов плоским массивом






Вы можете отфильтровать плоский массив $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, я сделаю это. еще раз спасибо.
вот ты где 3v4l.org/aXWeg
@Beh смотрите мои комментарии к вашему сценарию: 3v4l.org/gRnt3
Это то, что вам нужно? php.net/manual/en/function.array-diff.php