首页 > 解决方案 > 如何通过唯一的用户名合并多个关联数组

问题描述

我需要将 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);
}

但这是创建重复而不是附加。

标签: phparrays

解决方案


迭代单个数组并将用户名用作分组的键。

代码:(演示

$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));

推荐阅读