php - 如何通过唯一的用户名合并多个关联数组
问题描述
我需要将 3 个关联数组合并为一个具有唯一用户名的关联数组
我的 3 个数组如下所示: (var_export)
接受数组
array ( 'user1' => 1, 'user2' => 1, 'user3' => 1, )
待定数组
array ( 'user1' => 1, 'user3' => 2, 'user15' => 3, )
拒绝数组
array ( 'user1' => 1, 'user15' => 22, 'user20' => 5, )
每个数组都是查询获取的 array_count_values。
我需要有这样的输出:
$return = [
['username' => user1, 'accepted' => 1, 'pending' => 3 , 'denied' => 1]
['username' => user2, 'accepted' => 1, 'pending' => 4]
];
我试过这个(是的,完全关闭):
foreach ($acceptedUsers as $key => $value) {
$return[] = array('username' => $key, 'accepted' => $value);
}
foreach ($pendingUsers as $key => $value) {
$return[] = array('username' => $key, 'pending' => $value);
}
但这是创建重复而不是附加。
解决方案
迭代单个数组并将用户名用作分组的键。
代码:(演示)
$acceptedUsers = ["user1" => 1, "user2" => 1, "user3" => 1];
$pendingUsers = ["user1" => 3, "user2" => 4, "user5" => 2];
$deniedUsers = ["user1" => 1, "user15" => 4, "user10" => 2];
foreach ($acceptedUsers as $user => $count) {
$result[$user]['accepted'] = $count;
}
foreach ($pendingUsers as $user => $count) {
$result[$user]['pending'] = $count;
}
foreach ($deniedUsers as $user => $count) {
$result[$user]['denied'] = $count;
}
var_export($result);
而且,如果您需要子数组中的用户名,那么再次循环组可能就不那么复杂了。https://3v4l.org/0rUv5
foreach ($acceptedUsers as $user => $count) {
$grouped[$user]['accepted'] = $count;
}
foreach ($pendingUsers as $user => $count) {
$grouped[$user]['pending'] = $count;
}
foreach ($deniedUsers as $user => $count) {
$grouped[$user]['denied'] = $count;
}
foreach ($grouped as $user => $row) {
$result[] = ['username' => $user] + $row;
}
var_export($result);
否则,请isset()
在循环 2 和 3 中进行检查。 https://3v4l.org/3sstg
foreach ($acceptedUsers as $user => $count) {
$grouped[$user]['username'] = $user;
$grouped[$user]['accepted'] = $count;
}
foreach ($pendingUsers as $user => $count) {
if (!isset($grouped[$user])) {
$grouped[$user]['username'] = $user;
}
$grouped[$user]['pending'] = $count;
}
foreach ($deniedUsers as $user => $count) {
if (!isset($grouped[$user])) {
$grouped[$user]['username'] = $user;
}
$grouped[$user]['denied'] = $count;
}
var_export(array_values($grouped));
或强制用户名(无条件覆盖预先存在的用户名元素)https://3v4l.org/I1kBu
foreach ($acceptedUsers as $user => $count) {
$grouped[$user]['username'] = $user;
$grouped[$user]['accepted'] = $count;
}
foreach ($pendingUsers as $user => $count) {
$grouped[$user]['username'] = $user;
$grouped[$user]['pending'] = $count;
}
foreach ($deniedUsers as $user => $count) {
$grouped[$user]['username'] = $user;
$grouped[$user]['denied'] = $count;
}
var_export(array_values($grouped));
推荐阅读
- javascript - Babel-Standalone 错误:内联 Babel 脚本:当前未启用对实验性语法“decorators-legacy”的支持 (14:1):
- elasticsearch - 弹性搜索,对象数组的布尔查询
- flask - 无法在 gunicorn wsgi 服务器上运行烧瓶应用程序
- flutter - 应用程序在真机和模拟器上正常运行,但在生成 apk 时不工作
- android - dagger模块类的provider函数注解
- javascript - 有没有办法找到 html 元素的样式相关属性值?我想在我的下拉列表中加载这些值
- java - 无法在我的 jhipster 应用程序上加载其他配置文件
- python - 在 jupyter notebook 中使用 xlrd 在 python3 中读取 excel 时出错
- java - 我需要在 java 中使用 hashmap 制作图表,但我的代码在 addEdge 函数中显示空指针异常
- reactjs - 如何在反应中使用 push 方法删除添加的 Div?