(为了方便阅读,这是简化过后的题例)
题例:
$gameStatistics = [
["game"=>'aaa',"gameid"=>'100',"num"=>3],
["game"=>'bbb',"gameid"=>'222',"num"=>92],
["game"=>'ccc',"gameid"=>'333',"num"=>3],
["game"=>'aaa',"gameid"=>'100',"num"=>3],
["game"=>'bbb',"gameid"=>'222',"num"=>15],
["game"=>'ccc',"gameid"=>'333',"num"=>33],
["game"=>'aaa',"gameid"=>'100',"num"=>33],
["game"=>'bbb',"gameid"=>'222',"num"=>133],
["game"=>'ccc',"gameid"=>'333',"num"=>38],
["game"=>'fff',"gameid"=>'444',"num"=>77],
["game"=>'aaa',"gameid"=>'100',"num"=>37],
["game"=>'bbb',"gameid"=>'222',"num"=>193],
["game"=>'ccc',"gameid"=>'333',"num"=>31],
//省略更多......
];
最后的结果应该为:
$result = [
["game"=>'aaa',"gameid"=>'100',"num"=>???],
["game"=>'bbb',"gameid"=>'222',"num"=>???],
["game"=>'ccc',"gameid"=>'333',"num"=>???],
["game"=>'fff',"gameid"=>'444',"num"=>???],
];
请用代码算出???的结果。
计算过程:
//$statistics是个二维数组,$statistic是$statistics的一维数组,$statistic参考值如下:
//array(3) {
// ["game"] => string(12) "斗地主"
// ["gameid"] => string(3) "520"
// ["num"] => int(3)
//}
//将不重复数据保存到变量
$tmp_name_arr1 = [];
foreach ($statistics as $statistic){
if(empty($tmp_name_arr1[$statistic['gameid']])){
$tmp_data = [
'gameid'=>$statistic['gameid'],
'num'=>$statistic['num'],
'game'=>$statistic['game'],
];
$tmp_name_arr1[$statistic['gameid']] = $tmp_data;
}
//改进后的代码(之前的写法有问题,会多加一次)
else{
$tmp_name_arr1[$statistic['gameid']]["num"] += $statistic['num'];
}
}
//$tmp_name_arr1
//array(3) {
// [100] => array(3) {
// ["gameid"] => string(3) "100"
// ["num"] => int(1)
// ["game"] => string(12) "血战到底"
// }
// [520] => array(3) {
// ["gameid"] => string(3) "520"
// ["num"] => int(1)
// ["game"] => string(12) "四川麻将"
// }
// [411] => array(3) {
// ["gameid"] => string(3) "411"
// ["num"] => int(2)
// ["game"] => string(15) "跑得快"
// }
//}
//再计算num值
//foreach ($tmp_name_arr1 as $key_id=>&$arr1){
// foreach ($gameStatistics as $stat1){
// if($stat1['gameid'] == $key_id){
// $arr1['num'] += $stat1['num'];
// }
// }
//}
//unset($arr1);//删除引用
var_dump($tmp_name_arr1);
有兴趣的朋友可以试试其它算法。
以上由自己思考得出方法,还有改进空间,还有工作要做,后续再改进......
END