目次
回复内容:
预处理
查询

PHP如何提高文件查询效率

Jun 06, 2016 pm 08:51 PM
php

要从一个文件中查出以唯一字符串 a 开头的那一行,怎么能提高查询效率。
我现在的方法很笨:

  • 按行把文件内容存入一个数组
  • 用正则去match数组中的每一个元素直到找到为止

这样感觉效率很低,因为文件有17万行,所以最低也要循环17万次...
初学者希望得到大家的帮助,谢谢。

回复内容:

要从一个文件中查出以唯一字符串 a 开头的那一行,怎么能提高查询效率。
我现在的方法很笨:

  • 按行把文件内容存入一个数组
  • 用正则去match数组中的每一个元素直到找到为止

这样感觉效率很低,因为文件有17万行,所以最低也要循环17万次...
初学者希望得到大家的帮助,谢谢。

把这个文件处理成一个用字典树(trie)或者B树存储的结构,然后就可以快速查询了。

前面说得可能太抽象,给你一个容易实现的算法吧。效率虽然比trie/b-tree略低,但是也很够用。

预处理

1. 遍历这个文件,记录每行的offset记录下来,作为int的数组。
2. 对这个数组进行间接排序。注意,所谓间接,指的是排序时比较的是这个数组元素指向的行。
3. 将这个数组保存起来(17w个int,也就不到700KB,随便什么地方保存)。

查询

1. 读取这个数组。
2. 使用"间接"二分查找。注意,查找时比较的是对应行的前n个字符,n == strlen(a)。

如果看不懂这个算法的话,那就洗洗睡吧。

以唯一字符串a开头,意思是说,第一个是a,第二个不是a么?

<?php $file = "./test.txt";
$lines = file($file);
foreach($lines as $line_num => $line)
{
	$line = trim($line);
	$len = strlen($line);
	if ($len > 0 and $line[0] == "a" and ($len == 1 or $line[1] != "a") ) {
		echo $line . "\n";
	}
}
?>
ログイン後にコピー

没必要用正则吧,不知道PHP里面正则会不会提前compile,效率如何。

额。。。。直接把符合的行给匹配出来好了。整个文件一次读取作为一个字符串。。。
然后用正则,匹配首字母是a的行。。既然你都说是行了,哪必然有换行符的嘛。。。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

CakePHP プロジェクトの構成 CakePHP プロジェクトの構成 Sep 10, 2024 pm 05:25 PM

この章では、CakePHP の環境変数、一般設定、データベース設定、電子メール設定について理解します。

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

CakePHP の日付と時刻 CakePHP の日付と時刻 Sep 10, 2024 pm 05:27 PM

Cakephp4 で日付と時刻を操作するには、利用可能な FrozenTime クラスを利用します。

CakePHP ファイルのアップロード CakePHP ファイルのアップロード Sep 10, 2024 pm 05:27 PM

ファイルのアップロードを行うには、フォーム ヘルパーを使用します。ここではファイルアップロードの例を示します。

CakePHP ルーティング CakePHP ルーティング Sep 10, 2024 pm 05:25 PM

この章では、ルーティングに関連する次のトピックを学習します。

CakePHP について話し合う CakePHP について話し合う Sep 10, 2024 pm 05:28 PM

CakePHP は、PHP 用のオープンソース フレームワークです。これは、アプリケーションの開発、展開、保守をより簡単にすることを目的としています。 CakePHP は、強力かつ理解しやすい MVC のようなアーキテクチャに基づいています。モデル、ビュー、コントローラー

CakePHP データベースの操作 CakePHP データベースの操作 Sep 10, 2024 pm 05:25 PM

CakePHP でデータベースを操作するのは非常に簡単です。この章では、CRUD (作成、読み取り、更新、削除) 操作について理解します。

CakePHP バリデータの作成 CakePHP バリデータの作成 Sep 10, 2024 pm 05:26 PM

Validator は、コントローラーに次の 2 行を追加することで作成できます。

See all articles