Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何通过唯一的用户名合并多个关联数组_Php_Arrays - Fatal编程技术网

Php 如何通过唯一的用户名合并多个关联数组

Php 如何通过唯一的用户名合并多个关联数组,php,arrays,Php,Arrays,我需要将3个关联数组合并为一个具有唯一用户名的关联数组 我的3个数组如下所示:var_export 接受阵列 数组“user1”=>1,“user2”=>1,“user3”=>1 彭丁加里 数组“user1”=>1,“user3”=>2,“user15”=>3 德尼达雷 数组“user1”=>1,“user15”=>22,“user20”=>5 每个数组都是查询获取的数组\计数\值 我需要这样的输出: $return = [ ['username' => user1, 'accep

我需要将3个关联数组合并为一个具有唯一用户名的关联数组

我的3个数组如下所示:var_export

接受阵列 数组“user1”=>1,“user2”=>1,“user3”=>1

彭丁加里 数组“user1”=>1,“user3”=>2,“user15”=>3

德尼达雷 数组“user1”=>1,“user15”=>22,“user20”=>5

每个数组都是查询获取的数组\计数\值

我需要这样的输出:

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

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

迭代单个数组,并使用用户名作为分组键

代码:

如果您需要在子数组中使用用户名,那么只需再次循环这些组可能就不那么复杂了

否则,在循环2和3中进行isset检查

或者强制用户名无条件覆盖预先存在的用户名元素


您可以尝试此代码以获得结果

$acceptedArray = array ( 'user1' => 1, 'user2' => 1, 'user3' => 1 );
$pendingArray = array ( 'user1' => 1, 'user3' => 2, 'user15' => 3 );
$deniedArray = array ( 'user1' => 1, 'user15' => 22, 'user20' => 5 );

// Get all distinct username from 3 arrays given 
$u1 = array_unique(array_merge(array_keys($acceptedArray),array_keys($pendingArray),array_keys($deniedArray)));


$result = array(); // Initialize the result array

$index=0;
// Loop through each username and check if he has accept value, pending value and denied value
// If value exist, we assign value from array else set it as 0
foreach($u1 as $key => $val){
    $tmp = array();
    $tmp['username'] = $val;

    if(isset($pendingArray[$val])) 
        $tmp['pending'] = $pendingArray[$val]; 
    else 
        $tmp['pending'] = 0;

    if(isset($acceptedArray[$val])) 
        $tmp['accepted'] = $acceptedArray[$val]; 
    else 
        $tmp['accepted'] = 0;

    if(isset($deniedArray[$val])) 
        $tmp['denied'] = $deniedArray[$val]; 
    else 
        $tmp['denied'] = 0;

    $result[$index] = $tmp;
    $index++;
}

演示链接是

啊,是的,我错过了那部分。我来编辑。在我的手机上慢下来。@Artur我应该费心把用户名写在子数组中,还是你的程序可以将用户名作为键使用?你可以添加“$result[$user]['username']=$user;”在每个foreach循环中,添加此数组_值$result;在var_导出$result之前;要获得准确的输出,neededIt适用于第二个示例,但不适用于第三个示例,而是def。在js方面。所以一切都很好!如果第三个或第四个代码段在您的项目中不起作用,请检查您的变量名是否与“我的代码段”中的变量名完全相同@当你解释你的解决方案时,艺术回答者更有可能提供帮助。迟到是不值得道歉的。一年后,当研究人员发现这一页时,他们不会在意答案是否迟了一小时/天/月。唯一重要的是质量。
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);
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));
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));
$acceptedArray = array ( 'user1' => 1, 'user2' => 1, 'user3' => 1 );
$pendingArray = array ( 'user1' => 1, 'user3' => 2, 'user15' => 3 );
$deniedArray = array ( 'user1' => 1, 'user15' => 22, 'user20' => 5 );

// Get all distinct username from 3 arrays given 
$u1 = array_unique(array_merge(array_keys($acceptedArray),array_keys($pendingArray),array_keys($deniedArray)));


$result = array(); // Initialize the result array

$index=0;
// Loop through each username and check if he has accept value, pending value and denied value
// If value exist, we assign value from array else set it as 0
foreach($u1 as $key => $val){
    $tmp = array();
    $tmp['username'] = $val;

    if(isset($pendingArray[$val])) 
        $tmp['pending'] = $pendingArray[$val]; 
    else 
        $tmp['pending'] = 0;

    if(isset($acceptedArray[$val])) 
        $tmp['accepted'] = $acceptedArray[$val]; 
    else 
        $tmp['accepted'] = 0;

    if(isset($deniedArray[$val])) 
        $tmp['denied'] = $deniedArray[$val]; 
    else 
        $tmp['denied'] = 0;

    $result[$index] = $tmp;
    $index++;
}