php 如果在对象数组的列中找到元素,则从平面数组中移除元素

ttcibm8c  于 2023-04-04  发布在  PHP
关注(0)|答案(1)|浏览(130)

我在一个数组中有一个一维数组,我需要通过对象数组中的特定属性/列来过滤它。
我的输入数组由以下代码填充:

$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']
];

如何从$array_one数组中排除“pa_menu_endpoint”值。
所需过滤结果:

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

h79rfbju1#

$a$b不是对象时,您可以直接使用array_udiff()和比较回调中的null合并运算符,通过二维array_one数组过滤平面$array_tow数组,以回退到$array_tow值。
代码:(Demo

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

也许更容易理解的方法是预展平过滤数组($array_one)--这是两个函数调用,但没有自定义回调。
代码:(Demo

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

相关问题