php排序1亿个QQ号码解决方案
php排序1亿个QQ号码
吃饱喝足了,还发贴了。
拆开分成几千份进行排序再合并。
首先先创建一个1亿个QQ号的txt。
- PHP code
<!--Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--><?php // 创建一亿个QQ号的txt (大约需85~100秒)set_time_limit(0);$fn = 'qq.txt';$fp = fopen($fn, 'w');$st = microtime(true);$l = range(0,10000);shuffle($l);foreach ($l as $k=>$v){ $arr = range($v*10000+10000,10000*($v+1)+9999); shuffle($arr); fputs($fp,implode("\n", $arr)."\n"); unset($arr);}echo microtime(true)-$st;?>
稍等一两分钟1亿个随机QQ创建完成了。
QQ号码范围为>10000。文件大小大概有840MB。
下面就进行分类划分成几千份文件。
以QQ号码长度为文件夹,QQ号码前3位为文件名。
- PHP code
<!--Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--><?php // 长度号码分类 (大约需360~400秒)set_time_limit(0);$st = microtime(true);if(!is_dir('qq_no')) mkdir('qq_no');$file = fopen('qq.txt', 'r'); $i=0;$end_s = '';while(!feof($file)){ $g = 1042*1024; fseek($file,$g*$i); $s = fread($file, $g); $end = strrpos($s, "\n"); $arr_s = $end_s.substr($s, 0, $end); $end_s = substr($s, $end); $arr = explode("\n", $arr_s); foreach ($arr as $k=>$v) { if($v!='') { $tag = "$v[0]$v[1]$v[2]"; $text_arr[strlen($v)][$tag][] = $v; } } foreach ($text_arr as $k=>$v) { $n_dir = 'qq_no/'.$k; if (!is_dir($n_dir)) mkdir($n_dir); foreach ($v as $tag=>$val) { $n_tf = fopen($n_dir.'/'.$tag.'.txt', 'a+'); fputs($n_tf,implode("\n",$val)."\n"); } } unset($text_arr); ++$i;}echo microtime(true)-$st;?>
最后就要每个文件进行排序合并数据了。
- PHP code
<!--Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--><?php // 排序完成拉 (800~920秒)set_time_limit(0);$st = microtime(true);$qq_done = fopen('qq_done.txt', 'a+');$root = 'qq_no';$dir_array = scandir($root);foreach ($dir_array as $key=>$val){ if ($val != '.' && $val != '..') $dirs[$val] = scandir($root.'/'.$val);}foreach ($dirs as $key=>$val){ foreach ($val as $v) { if ($v != '.' && $v != '..') { $file = $root. '/' . $key . '/'. $v; $c = file_get_contents($file); $arr = explode("\n", $c); sort($arr); fputs($qq_done, implode("\n",$arr)); unlink($file); } } rmdir($root. '/' . $key);}rmdir($root);echo microtime(true)-$st;?>
总共大概花费了20多分钟。
虽然完成了,但方法很土鳖 0_0 ,坛里各位高手们改进改进啊。
------解决方案--------------------
来个C版本的
- C/C++ code
#include <stdio.h>#define BITSPERWORD 32#define SHIFT 5#define MASK 0x1F#define N 100000000int a[1 + N/BITSPERWORD];void set(int i){ a[i>>SHIFT] |= (1>SHIFT] &= ~(1>SHIFT] & (1<font color="#e78608">------解决方案--------------------</font><br><br>既然有现成的数据文件,就没有必要去构造插入串了<br><dl class="code">PHP code<pre class="brush:php;toolbar:false">set_time_limit(0);$sql =

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

1. La différence entre Iterator et foreach est la différence polymorphe (la couche inférieure de foreach est Iterator). Iterator est un type d'interface, et il ne se soucie pas du type de collection ou de tableau ; de la collection en premier, et même le type d'éléments dans la collection ; 1. Pourquoi dit-on que la couche inférieure de foreach est le code écrit par Iterator : Code décompilé : 2. La différence entre supprimer dans foreach et iterator. dans le manuel de développement Java d'Alibaba, mais aucune erreur ne sera signalée dans le cas 1, et une erreur sera signalée dans le cas 2 (java. util.ConcurrentModificationException) en premier

Les étapes permettant à PHP de déterminer le numéro de la boucle foreach : 1. Créez un tableau de "$fruits" ; 2. Créez une variable de compteur "$counter" avec une valeur initiale de 0. 3. Utilisez "foreach" pour boucler. à travers le tableau, et augmentez la valeur de la variable compteur dans le corps de la boucle, puis affichez chaque élément et son index ; 4. Affichez la valeur de la variable compteur en dehors de la boucle "foreach" pour confirmer quel élément atteint la boucle.

Cet article expliquera en détail comment PHP renvoie un tableau après avoir inversé la valeur de la clé. L'éditeur pense que c'est assez pratique, je le partage donc avec vous comme référence. J'espère que vous pourrez gagner quelque chose après avoir lu cet article. PHP Key Value Flip Array Key Value Flip est une opération sur un tableau qui échange les clés et les valeurs du tableau pour générer un nouveau tableau avec la clé d'origine comme valeur et la valeur d'origine comme clé. Méthode d'implémentation En PHP, vous pouvez effectuer un retournement clé-valeur d'un tableau via les méthodes suivantes : Fonction array_flip() : La fonction array_flip() est spécialement utilisée pour les opérations de retournement clé-valeur. Il reçoit un tableau en argument et renvoie un nouveau tableau avec les clés et les valeurs échangées. $original_array=[

php提交表单通过后,弹出的对话框怎样在当前页弹出php提交表单通过后,弹出的对话框怎样在当前页弹出而不是在空白页弹出?想实现这样的效果:而不是空白页弹出:------解决方案--------------------如果你的验证用PHP在后端,那么就用Ajax;仅供参考:HTML code

Qu’est-ce que la pièce AMP ? Le token AMP a été créé par l'équipe Synereo en 2015 comme principale devise de trading de la plateforme Synereo. Le jeton AMP vise à offrir aux utilisateurs une meilleure expérience économique numérique grâce à de multiples fonctions et utilisations. Objectif du jeton AMP Le jeton AMP a plusieurs rôles et fonctions dans la plateforme Synereo. Premièrement, dans le cadre du système de récompense en crypto-monnaie de la plateforme, les utilisateurs peuvent gagner des récompenses AMP en partageant et en promouvant du contenu, un mécanisme qui encourage les utilisateurs à participer plus activement aux activités de la plateforme. Les jetons AMP peuvent également être utilisés pour promouvoir et distribuer du contenu sur la plateforme Synereo. Les utilisateurs peuvent augmenter la visibilité de leur contenu sur la plateforme en utilisant des jetons AMP pour attirer davantage de téléspectateurs à consulter et à partager.

Cet article expliquera en détail l'élément actuel du tableau renvoyé par PHP. L'éditeur pense que c'est assez pratique, je le partage donc avec vous comme référence. J'espère que vous pourrez gagner quelque chose après avoir lu cet article. Récupérer l'élément actuel dans un tableau PHP PHP fournit une variété de méthodes pour accéder et manipuler les tableaux, notamment obtenir l'élément actuel dans un tableau. Ce qui suit présente plusieurs techniques couramment utilisées : 1. Fonction current() La fonction current() renvoie l'élément actuellement pointé par le pointeur interne du tableau. Le pointeur pointe initialement vers le premier élément du tableau. Utilisez la syntaxe suivante : $currentElement=current($array);2.key() fonction key() la fonction renvoie l'élément actuellement pointé par le pointeur interne du tableau

Comment parcourir les propriétés d'un objet à l'aide de la fonction forEach ? En JavaScript, nous devons souvent parcourir les propriétés des objets. Si vous souhaitez utiliser une manière concise pour parcourir les propriétés d'un objet, la fonction forEach est un très bon choix. Dans cet article, nous expliquerons comment utiliser la fonction forEach pour parcourir les propriétés d'un objet et fournirons des exemples de code spécifiques. Tout d’abord, comprenons l’utilisation de base de la fonction forEach. la fonction forEach est Java

Différences : 1. for parcourt chaque élément de données via l'index, tandis que forEach parcourt les éléments de données du tableau via le programme sous-jacent JS ; 2. for peut terminer l'exécution de la boucle via le mot-clé break, mais forEach ne le peut pas ; .for peut contrôler l'exécution de la boucle en contrôlant la valeur de la variable de boucle, mais forEach ne peut pas ; 4. for peut appeler des variables de boucle en dehors de la boucle, mais forEach ne peut pas appeler des variables de boucle en dehors de la boucle ; est supérieur à forEach.
