找資料重複部分

來源:互聯網
上載者:User
  1. 現在有一批通訊錄資料(10000多個人的通訊錄)需要找出每兩個人的通訊錄的重複部分(就是誰和誰的通訊錄重複了多少條)要所有人的通訊錄都兩兩比對一遍
    例如 有 ABCDE四個人的通訊錄 找出 AB AC AD AE BC BD BE CD CE DE 之間的通訊錄重複條數

手機號重複 就認為這兩條通訊錄重複
這個是資料表,有10000多個人通訊錄

list欄位存的json就是通訊錄的內容
一個人通訊錄 100條到1000條不等

我目前嘗試的做法是,一下取出所有人的通訊錄,然後拿第一個人跟剩下所有人的進行比對(foreach這個數組,裡面嵌套foreach) 然後拿第二個人的跟剩下所有人的比對,以此類推.
指令碼部分代碼


然後運行指令碼 指令碼跑了20多個小時 才跑了一半左右 記憶體,CPU佔用也比較高 指令碼效率太低了

請教一下,有沒有更好方法來找出這批資料的重複部分,或者指令碼怎麼最佳化最佳化

謝謝大家

回複內容:

  1. 現在有一批通訊錄資料(10000多個人的通訊錄)需要找出每兩個人的通訊錄的重複部分(就是誰和誰的通訊錄重複了多少條)要所有人的通訊錄都兩兩比對一遍
    例如 有 ABCDE四個人的通訊錄 找出 AB AC AD AE BC BD BE CD CE DE 之間的通訊錄重複條數

手機號重複 就認為這兩條通訊錄重複
這個是資料表,有10000多個人通訊錄

list欄位存的json就是通訊錄的內容
一個人通訊錄 100條到1000條不等

我目前嘗試的做法是,一下取出所有人的通訊錄,然後拿第一個人跟剩下所有人的進行比對(foreach這個數組,裡面嵌套foreach) 然後拿第二個人的跟剩下所有人的比對,以此類推.
指令碼部分代碼


然後運行指令碼 指令碼跑了20多個小時 才跑了一半左右 記憶體,CPU佔用也比較高 指令碼效率太低了

請教一下,有沒有更好方法來找出這批資料的重複部分,或者指令碼怎麼最佳化最佳化

謝謝大家

$data = array(    array('id'=>1,'name'=>1),    array('id'=>2,'name'=>2),    array('id'=>3,'name'=>3),    array('id'=>1,'name'=>2));$ret = array();# 資料遍曆一次,以計算重複key作為key建立資料,如果存在value +1,如果不存在設定為1foreach($data as $k=>$v){    $_id = $v['id'];    $_name = $v['name'];    if (array_key_exists($_id, $ret)) {        $ret[$_id]++;    }else{        $ret[$_id] = 1;    }}# 遍曆結果foreach($ret as $k=>$v){    echo "{$k}出現{$v}次\n";}#print_r($id)
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.