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