提取两个数组的共同键名再此排序

本文介绍了一种处理联表查询返回的两个键名相同但字段不同的二维数组的方法。通过合并数组并处理重复键名,确保了数据完整性和一致性。此外,文章还展示了如何遍历这些数据并进行累加计算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

联表查询
两个返回值的处理方法:
public static function getUserConsume($period,$character){
$uid=self::getByCharacter($character);
if($uid&&$period){

$userconsumescore = self :: getuserconsumescore($period, $uid);
$userscore = self :: getuserscore($period, $uid);

---------上面返回两个键名相同的二维数组,但是返回字段不同
$keys = array_unique (array_merge(array_keys($userconsumescore), array_keys($userscore)));
//array_keys()获得数组的键名,array_merge()合并数组;如果键名有重复,该键的键值为最后一个键名对应的值(后面的覆盖前面的)。如果数组是数字索引的,则键名会以连续方式重新索引。
array_unique() 函数移除数组中的重复的值,并返回结果数组。当几个数组元素的值相等时,只保留第一个元素,其他的元素被删除。返回的数组中键名不变
sort($keys);//获得键名的数组
$outdates = array();
$showtotalconsumeaddgx = $showtotalconsumeaddhonor = $showtotaladdhonor = $showtotaladdgx = 0;
//print_r($userconsumescore);
//print_r($keys);

//foreach 循环日期
foreach($keys as $date){
//echo $date . "/n<br />";
$totaladdhonor = isset($userscore[$date]['totaladdhonor']) ? $userscore[$date]['totaladdhonor'] : 0;
$showtotaladdhonor += $totaladdhonor;

$totaladdgx = isset($userscore[$date]['totaladdgx']) ? $userscore[$date]['totaladdgx'] : 0;
$showtotaladdgx += $totaladdgx;

$totalconsumeaddgx = isset($userconsumescore[$date]['addgx']) ? $userconsumescore[$date]['addgx'] : 0;
$showtotalconsumeaddgx += $totalconsumeaddgx;

$totalconsumeaddhonor = isset($userconsumescore[$date]['addhonor']) ? $userconsumescore[$date]['addhonor'] : 0;
$showtotalconsumeaddhonor += $totalconsumeaddhonor;
//方便添加字段,和查阅
$outdates[$date] = array(
'time'=>$date,
'totaladdhonor' => $totaladdhonor,
'showtotaladdhonor' => $showtotaladdhonor,
'totaladdgx' => $totaladdgx,
'showtotaladdgx' => $showtotaladdgx,
'totalconsumeaddgx' => $totalconsumeaddgx,
'showtotalconsumeaddgx' => $showtotalconsumeaddgx,
'totalconsumeaddhonor' => $totalconsumeaddhonor,
'showtotalconsumeaddhonor' => $showtotalconsumeaddhonor );
}
}

return $outdates;
}

常规的方法:

public static function getUserConsume($period,$character){
$uid=self::getByCharacter($character);
if($uid&&$period){

$userconsumescore = self :: getuserconsumescore($period, $uid);
$userscore = self :: getuserscore($period, $uid);

$keys = array_unique (array_merge(array_keys($userconsumescore), array_keys($userscore)));
sort($keys);
foreach($keys as $date){

$return[$date]['time']=$userconsumescore[$date]['time'];
$return[$date]['totaladdhonor']=$userscore[$date]['totaladdhonor'];
$return[$date]['showtotaladdhonor'] +=$userscore[$date]['totaladdhonor'];

$return[$date]['totaladdgx']=$userscore[$date]['totaladdgx'];
$return[$date]['showtotaladdgx'] +=$userscore[$date]['totaladdgx'];

$return[$date]['totalconsumeaddgx'] =$userconsumescore[$date]['addgx'];
$return[$date]['showtotalconsumeaddgx'] +=$userconsumescore[$date]['addgx'];
$return[$date]['totalconsumeaddhonor'] =$userconsumescore[$date]['addhonor'];
$return[$date]['showtotalconsumeaddhonor'] +=$userconsumescore[$date]['addhonor'];
}

return $return;
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值