記錄算法:運營需求 要把 起點和終點相同的司機訂單 合併到一起表示一條路線的多次接單記錄

運營需求 要把 起點和終點相同的司機訂單 合併到一起表示一條路線的多次接單記錄    如他有多條  合併成一條 並記錄合併次數 

這個需求我當時響了很久,自己嘗試寫了算法,但是好像還是差點什麼。我問了一下我小弟 他直接告訴我 弄不了。

後來自己就默默想了好久,沒有想出來。

後來諮詢了一下大佬。大佬幫我寫了個算法正好可以處理這個問題。

 

 

 

 

數據表讀出來的數據是目前現在的樣子。但是他們想要吧起點和終點相同的司機訂單合計成一次接單記錄 並且計算出平均運費。

 public static function calcCount($arr) {
        $k_2 = 'start_poi';
        $k_1 = 'end_poi';
        $result = [];
        foreach ($arr as $key => $item) {
            // $result數組中是否存在 start_poi + end_poi組合的key
            if(!isset($result[$item[$k_1] . $item[$k_2]])) {
                // 不存在就對數組$result的start_poi + end_poi組合key 進行賦值
                $result[$item[$k_1] . $item[$k_2]] = [
                    'total' => $item['transprice_per_mine'],
                    'count' => 1
                ];
            } else {
                // 存在就說明有重複的,對value +1,並且刪除unset對應的數組值
                $result[$item[$k_1] . $item[$k_2]]['count'] += 1;
                $result[$item[$k_1] . $item[$k_2]]['total'] += $item['transprice_per_mine'];
                unset($arr[$key]);
            }
        }
        foreach ($arr as &$item) {
            // 把$result數組的結果賦值到去過重的原始數組中
            $item['count'] =  isset($result[$item[$k_1] . $item[$k_2]]['count']) ? $result[$item[$k_1] . $item[$k_2]]['count'] : 1;
            $item['average'] = (isset($result[$item[$k_1] . $item[$k_2]]['total']) ? $result[$item[$k_1] . $item[$k_2]]['total'] :0) / $item['count'];
        }unset($item);
        return $arr;
    }

 

現在分享一下大佬給我算法,也算是記錄一下,防止下次再忘記了。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章