php - 具有多条件的php多维数组差异
问题描述
我在 php 中有 2 个数组:
$all_users = [
0=[
user_id = 1,
team_id = 1,
],
1=[
user_id = 1,
team_id = 2,
],
2=[
user_id = 2,
team_id = 1,
],
3=[
user_id = 3,
team_id = 1,
],
];
$selected_users = [
0=[
user_id = 1,
team_id = 1,
],
1=[
user_id = 3,
team_id = 1,
],
];
我想返回未选中的用户。我的意思是我想要:
$not_selected_users = [
0=[
user_id = 1,
team_id = 2,
],
1=[
user_id = 2,
team_id = 1,
],
];
我怎么能得到这个?
它是一个多条件的多维数组。我使用多个 for、array_search、array_keys 进行测试,但我无法得到它。
注意:在 all_usersuser_id
中可以重复,例如每个用户可以在多个团队或其他......我的意思是我们可以在 all_users 数组中重复 user_id。
解决方案
// To speed up search you need `user_id` values as keys:
$selected_users_keys = array_column($selected_users, 'user_id', 'user_id');
// next just filter:
$not_selected_users = array_filter(
$all_users,
function ($v) use ($selected_users_keys) {
return !isset($selected_users_keys[$v['user_id']]);
}
);
小提琴。
修改后的算法小提琴:
$selected_users_keys = [];
foreach ($selected_users as $user) {
$selected_users_keys[$user['user_id'] . '-' . $user['team_id']] = 1;
}
// next just filter:
$not_selected_users = array_filter(
$all_users,
function ($v) use ($selected_users_keys) {
return !isset($selected_users_keys[$v['user_id'] . '-' . $v['team_id']]);
}
);
print_r($not_selected_users);
推荐阅读
- r - 组合行并生成类别计数
- reactjs - url中的React Router多个参数未导航到组件
- latex - 使用 pandoc 将代码列表从 mediawiki 转换为 Latex
- reactjs - 使用自定义设置器和清理功能包装 useState 挂钩
- vue.js - 在动作中使用 Vuex 状态数据
- python - Python - 如何从名称中带有竖线的文件夹中导入类?
- swift - 如何在 SwiftUI 中拥有特定于场景的状态?
- javascript - 当单击其他组件的按钮时,我想增加和减少数字
- javascript - 尝试使用 React 测试库检查不存在的元素总是失败
- javascript - 在这种情况下如何创建对象?