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' ]
解决方案
两步就能搞定:
- 先从对象数组
$array_tow里提取出所有pa_menu_endpoint的值,转成纯值数组 - 用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_endpointsarray_diff()会返回$array_one中存在但$exclude_endpoints里没有的元素,刚好完成排除操作- 最后用
array_values()重置索引,避免原数组键名保留导致的索引不连续问题
内容的提问来源于stack exchange,提问作者Behzad
相关产品推荐
相关产品推荐

