首頁  >  文章  >  後端開發  >  找資料重複部分

找資料重複部分

WBOY
WBOY原創
2016-08-31 08:54:53848瀏覽

  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佔用也比較高 腳本效率太低了

請教一下,有沒有更好方法來找出這批數據的重複部分,或者腳本怎麼優化優化

謝謝大家

<code class="php">$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,如果不存在设置为1
foreach($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)
</code>
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn