php - 如何在保留兄弟键值对的同时基于键值与数组相交
问题描述
我有两个数组,第一个是我想在网页中显示的用户列表,第二个数组包括完整的用户列表以及与每个用户关联的一些数据。
我可以使用 php 函数使用第一个作为主列表轻松减少第二个数组中的用户列表array_intersect_key()
,但这也删除了与网页中需要的每个用户关联的属性。
如何限制第二个列表并保留每个用户的键值对?
$usersToShow = Array (
[data] => Array
(
[0] => Array
(
[resourcesCode] => 1/ADS
)
[1] => Array
(
[resourcesCode] => 1/AI
)
)
)
$userArray = Array(
[data] => Array
(
[0] => Array
(
[resourcesUuid] => 5B065639CEF911E3B45500505681619D
[resourcesTimestampModified] => 1445523359
[resourcesRecordVersionNumber] => 151
[resourcesCode] => 1/ADS
[resourcesName] => Ads de Sps
)
[1] => Array
(
[resourcesUuid] => 09D63BA70B045595B94B1663B4914162
[resourcesTimestampModified] => 1434377814
[resourcesRecordVersionNumber] => 3
[resourcesCode] => 1/AH
[resourcesName] => Alan Hastings
)
[2] => Array
(
[resourcesUuid] => 423C078A974F42654550E92C94EB3C5B
[resourcesTimestampModified] => 1472547682
[resourcesRecordVersionNumber] => 2
[resourcesCode] => 1/AI
[resourcesName] => Adam Iley
)
)
)
期望的结果
Array
(
[data] => Array
(
[0] => Array
(
[resourcesCode] => 1/ADS
[resourcesName] => Ads de Sps
)
[1] => Array
(
[resourcesCode] => 1/AI
[resourcesName] => Adam Iley
)
)
)
注意: - 第二个数组实际上包含 100 个用户,为简洁起见,我在这里展示了三个。
解决方案
您可以使用array_filter
生成一个输出数组,该数组仅包含$userArray
其resourcesCode
值存在于的值$usersToShow
:
$resourcesToShow = array_column($usersToShow['data'], 'resourcesCode');
$users = array();
$users['data'] = array_filter($userArray['data'], function ($v) use ($resourcesToShow) { return in_array($v['resourcesCode'], $resourcesToShow); });
print_r($users);
输出:
Array
(
[data] => Array
(
[0] => Array
(
[resourcesUuid] => 5B065639CEF911E3B45500505681619D
[resourcesTimestampModified] => 1445523359
[resourcesRecordVersionNumber] => 151
[resourcesCode] => 1/ADS
[resourcesName] => AdsdeSps
)
[2] => Array
(
[resourcesUuid] => 423C078A974F42654550E92C94EB3C5B
[resourcesTimestampModified] => 1472547682
[resourcesRecordVersionNumber] => 2
[resourcesCode] => 1/AI
[resourcesName] => AdamIley
)
)
)
推荐阅读
- sql - How to use count "how many times a particular customer made inquiries"?
- javascript - 将普通 JSON 对象转换为类似文件夹的结构的逻辑
- c# - Google Cloud Monitoring:使用代码提取警报策略状态
- azure-application-insights - 如何计算 Kusto 同一会话中两个连续请求之间的持续时间
- powershell - 在终止错误时终止跨机器的整个管道
- computer-name - 在 MDT 中为 OsdComputerName 设置最大长度
- vue.js - Vue.js:循环
标签 - python - 样式化 django 模板引导程序中的代码片段
- c# - 如何解决命名空间“Microsoft”中不存在类型或命名空间名称“Office”(您是否缺少程序集引用?)
- javascript - 有没有可能检查函数是否有另一个函数的内部调用?