ホームページ  >  記事  >  バックエンド開発  >  PHP ファイル操作 - 他のファイルからこのファイルにデータを追加します

PHP ファイル操作 - 他のファイルからこのファイルにデータを追加します

不言
不言オリジナル
2018-04-04 14:43:551491ブラウズ

この記事の内容は php ファイル操作です - 他のファイルからこのファイルにデータを追加します。今すぐみんなと共有して、必要な友達はそれを参照できます

GitHub ソース コード
実際、私たちのプログラムは次の答えに基づいています。次の質問:

2 つのテキスト ファイル A.txt B.txt
A.txt 3,000 万行があり、ユーザー ID は一意であり、ユーザー ID とユーザー名はスペースで区切られています。以下に示すように:
userid username
1 yi
2 er
3san
……
b.txtには3,000万行があり、useridは一意であり、ユーザーIDとリアル名は以下に示すようにスペースで区切られています。 B.txt の 3 列目に、時間計算量が示されています。

今回のプログラムでは、2つのファイルの行データはデフォルトで1対1に対応しており、Aのn行目のデータとBのn行目のデータが対応しています。私たちのプログラムの複雑さは O(n) です。

しかし、実際の操作では、2つのファイルのデータ行が1対1に対応していない状況が必ず発生します。この場合、時間計算量がO(nの最も単純な操作のみを考えました。 ^2)。この問題を解決するためのこれより優れたアルゴリズムはありません。

ファイルを読み取り、O(1) または O(logn) のクエリを使用してデータ構造に構築すると、ファイルが大きすぎる場合、複雑さは O(n) または O(nlogn) になります。 、構築 データ構造が大きすぎる状況に対処する方法、データベース B-Tree インデックスから学ぶ? B.txt

A.txt 3,000 万行、ユーザー ID は一意であり、ユーザー ID とユーザー名はスペースで区切られています。以下に示す:

userid username

1 yi

2 er

3 san

… …

B.txt 3,000 万行、ユーザー ID は一意であり、以下に示すように、Userid と RealName はスペースで区切られます。

Userid RealName

1

2
3

3


文章を書いて、b.txt でユーザー ID に対応するユーザー名を見つけて、A.TXT で見つけて、B.txt の 3 番目の列に記入して、時間計算量を入力してください。

今回のプログラムでは、2つのファイルの行データはデフォルトで1対1に対応しており、Aのn行目のデータとBのn行目のデータが対応しています。私たちのプログラムの複雑さは O(n) です。

しかし、実際の操作では、2つのファイルのデータ行が1対1に対応していない状況が必ず発生します。この場合、時間計算量がO(nの最も単純な操作のみを考えました。 ^2)。この問題を解決するためのこれより優れたアルゴリズムはありません。

ファイルを読み取り、O(1) または O(logn) のクエリを使用してデータ構造に構築すると、ファイルが大きすぎる場合、複雑さは O(n) または O(nlogn) になります。 , build データ構造が大きすぎる場合の対処方法、データベースの b-tree インデックスの実践から学ぶ?

<?php
header("content-type:text/html;charset=utf-8");

function decodeLine(string $lineData, string $delimiter = null)
{    if (is_null($delimiter)) {        $delimiter = &#39; &#39;;
    }    return explode($delimiter, $lineData);
}

function encodeLine(array $dataList, string $delimiter = null)
{    if (is_null($delimiter)) {        $delimiter = &#39; &#39;;
    }    return implode($delimiter, $dataList);
}$testA = fopen(&#39;./TestData/FileOperation/testA.txt&#39;, &#39;r&#39;);$testB = fopen(&#39;./TestData/FileOperation/testB.txt&#39;, &#39;r+&#39;);$tmpFile = tmpfile();//while (($bBuffer = fgets($testB)) != false) {    $bList = decodeLine(trim($bBuffer, "\n\r"));    $tmpList = $bList;    if (($aBuffer = fgets($testA)) != false) {        $aList = decodeLine(trim($aBuffer, "\n\r"));        if ($aList[0] == $bList[0]) {            $strEncoding = mb_detect_encoding($aList[1], [&#39;ASCII&#39;, &#39;UTF-8&#39;, &#39;GB2312&#39;]);            $resStr = mb_convert_encoding($aList[1], &#39;UTF-8&#39;, $strEncoding);
            array_push($tmpList, $resStr."\n");
        }
    }    fwrite($tmpFile, encodeLine($tmpList));
}

rewind($tmpFile);
rewind($testB);while (!feof($tmpFile)) {    $tmpBuffer = fread($tmpFile, 1024);    fwrite($testB, $tmpBuffer);
}fclose($tmpFile);fclose($testA);fclose($testB);

関連推奨事項:


ディレクトリ内のファイルを取得して相対パスを計算する PHP ファイル操作方法

パッチファイル PHP ファイル操作によりコード共有が可能になります

以上がPHP ファイル操作 - 他のファイルからこのファイルにデータを追加しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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