天天看点

【备忘】一个简单的算法题目:一个二维数组中有多个一维数组,这个一维数组的数据结构一致,但键名可能不一样,要求计算出不重复键名的num值,最后得出不重复键名组成的二维数组。

题例:

$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"=>???],
];
           

请用代码算出???的结果。

计算过程:

//$gameStatistics是个二维数组,$statistic是$gameStatistics的一维数组,$statistic参考值如下:
    //array(3) {
    //  ["game"] => string(12) "綦江麻将"
    //  ["gameid"] => string(3) "520"
    //  ["num"] => int(3)
    //}

    //将不重复数据保存到变量
    $tmp_name_arr1 = [];
    foreach ($gameStatistics 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;
        }
    }

    //$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