Maison  >  Article  >  développement back-end  >  Explication détaillée de la façon dont PHP peut trier rapidement des millions de données

Explication détaillée de la façon dont PHP peut trier rapidement des millions de données

*文
*文original
2018-01-05 18:03:292660parcourir

Dans mon travail quotidien, je reçois souvent des notifications pour envoyer des messages de groupe aux membres du site Web via des lettres sur le site, des SMS sur téléphone portable et des e-mails. La liste des utilisateurs est généralement fournie par d'autres collègues, et il y aura inévitablement des duplications. Afin d'éviter des envois répétés, je dois donc dédupliquer la liste d'utilisateurs qu'ils fournissent avant d'envoyer des informations. Ensuite, j'utiliserai la liste uid pour expliquer comment j'utilise le tableau php pour dédupliquer. J'espère que cela aide tout le monde.

Si vous obtenez une liste d'uid avec plus d'un million de lignes, le format est le suivant :

10001000 
10001001 
10001002 
...... 
10001000 
...... 
10001111  

En fait, en utilisant les caractéristiques des tableaux php, il est facile d'effectuer une déduplication . Jetons d'abord un coup d'œil à php. Définition d'un tableau : un tableau en PHP est en fait une carte ordonnée. Une carte est un type qui associe des valeurs à des clés. Ce type est optimisé de plusieurs manières, il peut donc être traité comme un véritable tableau, ou une liste (vecteur), une table de hachage (une implémentation d'une carte), un dictionnaire, un ensemble, une pile, une file d'attente et bien d'autres. plus de possibilités. La valeur d'un élément du tableau peut également être celle d'un autre tableau. Les structures arborescentes et les tableaux multidimensionnels sont également autorisés.
Dans les tableaux PHP, les clés sont également appelées index et sont uniques. Nous pouvons utiliser cette fonctionnalité pour effectuer la déduplication. L'exemple de code est le suivant :

<?php
//定义一个数组,用于存放排重后的结果 
$result = array(); 
//读取uid列表文件 
$fp = fopen(&#39;test.txt&#39;, &#39;r&#39;); 
while(!feof($fp)) 
{ 
$uid = fgets($fp); 
$uid = trim($uid); 
$uid = trim($uid, "\r"); 
$uid = trim($uid, "\n"); 
if($uid == &#39;&#39;) 
{ 
continue; 
} 
//以uid为key去看该值是否存在 
if(empty($result[$uid])) 
{ 
$result[$uid] = 1; 
} 
} 
fclose($fp); 
//将结果保存到文件 
$content = &#39;&#39;; 
foreach($result as $k => $v) 
{ 
$content .= $k."\n"; 
} 
$fp = fopen(&#39;result.txt&#39;, &#39;w&#39;); 
fwrite($fp, $content); 
fclose($fp); 
?>  

Plus de 20 lignes de code, vous pouvez. dédupliquez plus d'un million de données, l'efficacité est également bonne et c'est très pratique. Les numéros de téléphone portable et les e-mails peuvent également être dédupliqués de cette manière.
En outre, cette méthode peut également être utilisée pour dédupliquer deux fichiers. Si vous avez deux fichiers de liste UID, le format est le même que celui de la liste UID ci-dessus. L'exemple de programme est le suivant :

<?php 
//定义数组,用于存放排重后的结果 
$result = array(); 
//读取第一个uid列表文件,放入$result_1 
$fp = fopen(&#39;test_1.txt&#39;, &#39;r&#39;); 
while(!feof($fp)) 
{ 
$uid = fgets($fp); 
$uid = trim($uid); 
$uid = trim($uid, "\r"); 
$uid = trim($uid, "\n"); 
if($uid == &#39;&#39;) 
{ 
continue; 
} 
//以uid为key写入$result,如有重复就会覆盖 
$result[$uid] = 1; 
} 
fclose($fp); 
//读取第二个uid列表文件,并进行排重操作 
$fp = fopen(&#39;test_2.txt&#39;, &#39;r&#39;); 
while(!feof($fp)) 
{ 
$uid = fgets($fp); 
$uid = trim($uid); 
$uid = trim($uid, "\r"); 
$uid = trim($uid, "\n"); 
if($uid == &#39;&#39;) 
{ 
continue; 
} 
//以uid为key去看该值是否存在 
if(empty($result[$uid])) 
{ 
$result[$uid] = 1; 
} 
} 
fclose($fp); 
//$result里保存的就排重以后的结果,可以输出到文件,代码省略 
?>

Si vous y réfléchissez bien, il n'est pas difficile de constater que l'utilisation de cette fonctionnalité des tableaux peut résoudre davantage de problèmes dans notre travail.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn