You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP:如何从一维数组中排除对象数组pa_menu_endpoint列的元素?

问题描述

我有一个一维数组 $array_one,需要根据对象数组 $array_tow 里的pa_menu_endpoint属性值对它过滤——把$array_tow中该属性对应的所有值从$array_one里排除掉。

输入数组的生成代码:

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

期望的过滤结果:

[
    'dashboard',
    'orders',
    'downloads',
    'edit-address',
    'woo-wallet',
    'edit-account',
    'customer-logout'
]
解决方案

两步就能搞定:

  1. 先从对象数组$array_tow里提取出所有pa_menu_endpoint的值,转成纯值数组
  2. 用PHP的array_diff()函数计算两个数组的差集,直接得到排除后的结果

具体代码实现:

// 提取需要排除的端点值
$exclude_endpoints = array_map(function($item) {
    return $item->pa_menu_endpoint;
}, $array_tow);

// 过滤数组,得到差集
$filtered_array = array_diff($array_one, $exclude_endpoints);

// 可选:重置数组索引为连续数字(和示例结果结构一致)
$filtered_array = array_values($filtered_array);

代码说明

  • array_map()遍历$array_tow里的每个对象,取出pa_menu_endpoint属性值,生成纯值数组$exclude_endpoints
  • array_diff()会返回$array_one中存在但$exclude_endpoints里没有的元素,刚好完成排除操作
  • 最后用array_values()重置索引,避免原数组键名保留导致的索引不连续问题

内容的提问来源于stack exchange,提问作者Behzad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 11:43:24