天天看點

【備忘】一個簡單的算法題目:一個二維數組中有多個一維數組,這個一維數組的資料結構一緻,但鍵名可能不一樣,要求計算出不重複鍵名的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