現在有一批通訊錄資料(10000多個人的通訊錄)需要找出每兩個人的通訊錄的重複部分(就是誰和誰的通訊錄重複了多少條)要所有人的通訊錄都兩兩比對一遍
例如有ABCDE四個人的通訊錄找出AB AC AD AE BC BD BE CD CE DE 之間的通訊錄重複條數
手機號重複 就認為這兩條通訊錄重複
這個是數據表,有10000多個人通訊錄
list欄位存的json就是通訊錄的內容
一個人通訊錄 100條到1000條不等
我目前嘗試的做法是,一下取出所有人的通訊錄,然後拿第一個人跟剩下所有人的進行比對(foreach這個數組,裡面嵌套foreach) 然後拿第二個人的跟剩下所有人的比對,以此類推.
腳本部分代碼
然後運行腳本 腳本跑了20多個小時 才跑了一半左右 內存,CPU佔用也比較高 腳本效率太低了
謝謝大家
現在有一批通訊錄資料(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>