如何利用php數組對百萬數據進行排重
在平時的工作中經常接到要對網站的會員進行站內信手機短信email進行群發信息的通知用戶列表一般由別的同事提供當中難免會有重復為了避免重復發送所以我在進行發送信息前要對他們提供的用戶列表進行排重下面我以uid列表來講講我是如何利用php數組進行排重的
假如得到一個uid列表數量在百萬行以上格式如下
其實利用php數組的特性很好進行排重我們先來看一下php數組的定義PHP 中的數組實際上是一個有序映射映射是一種把 values 關聯到 keys 的類型此類型在很多方面做了優化因此可以把它當成真正的數組或列表(向量)散列表(是映射的一種實現)字典集合棧隊列以及更多可能性數組元素的值也可以是另一個數組樹形結構和多維數組也是允許的
在php的數組中鍵(keys)也稱為索引具有唯一性我們正可以利用這一特性進行排重示例代碼如下
<?php
//定義一個數組用於存放排重後的結果
$result = array();
//讀取uid列表文件
$fp = fopen(testtxt r);
while(!feof($fp))
{
$uid = fgets($fp);
$uid = trim($uid);
$uid = trim($uid "r");
$uid = trim($uid "n");
if($uid == )
{
continue;
}
//以uid為key去看該值是否存在
if(empty($result[$uid]))
{
$result[$uid] = ;
}
}
fclose($fp);
//將結果保存到文件
$content = ;
foreach($result as $k => $v)
{
$content = $k"n";
}
$fp = fopen(resulttxt w);
fwrite($fp $content);
fclose($fp);
?>
多行代碼
就可以對百萬以上的數據進行排重
效率也不錯
非常實用
手機號
email
也可以采用這種方式進行排重
還有這可方法還可以用於兩個文件進行排重的工作如果你有兩個uid列表文件格式和上面的uid列表一樣示例程序如下
<?php
//定義數組用於存放排重後的結果
$result = array();
//讀取第一個uid列表文件放入$result_
$fp = fopen(test_txt r);
while(!feof($fp))
{
$uid = fgets($fp);
$uid = trim($uid);
$uid = trim($uid "r");
$uid = trim($uid "n");
if($uid == )
{
continue;
}
//以uid為key寫入$result如有重復就會覆蓋
$result[$uid] = ;
}
fclose($fp);
//讀取第二個uid列表文件並進行排重操作
$fp = fopen(test_txt r);
while(!feof($fp))
{
$uid = fgets($fp);
$uid = trim($uid);
$uid = trim($uid "r");
$uid = trim($uid "n");
if($uid == )
{
continue;
}
//以uid為key去看該值是否存在
if(empty($result[$uid]))
{
$result[$uid] = ;
}
}
fclose($fp);
//$result裡保存的就排重以後的結果可以輸出到文件代碼省略
?>
仔細想想不難發現利用數組的這一特性還可以解決我們工作中的更多問題
From:http://tw.wingwit.com/Article/program/PHP/201311/21346.html