ホームページ  >  記事  >  バックエンド開発  >  [] 2 つのテキストを処理する PHP の効率に関する問題

[] 2 つのテキストを処理する PHP の効率に関する問題

WBOY
WBOYオリジナル
2016-06-13 12:25:21853ブラウズ

[ヘルプ] 2 つのテキストを処理する PHP の効率に関する問題

<?php<br />/*<br /><br />==> 1.txt <==<br />a:123<br />b:1333<br />c:333<br /><br />==> 2.txt <==<br />a:3333<br />aa:3433<br />c:323dfa<br /><br />==> result.txt <==<br />a:123:3333<br />c:333:323dfa<br /><br />*/<br /><br /><br />$file_1 = "1.txt";<br />$file_2 = "2.txt";<br /><br />$f = fopen("$file_1", 'r') or die("Cann't Open the file.");<br /><br />while (!(feof($f))) {<br />        $line = explode(':', trim(fgets($f)));<br />        $f2 = fopen("$file_2", 'r') or die("Cann't Open the file.");<br />        while (!(feof($f2))) {<br />                $line2 = explode(':', trim(fgets($f2)));<br />                if ($line[0] == $line2[0]) {<br />                        $line[] = $line2[1];<br />                        $aaaa = implode(":",$line);<br />                        $output_file = fopen("./result.txt", 'a');<br />                        echo "$aaaa\n";<br />                        fwrite($output_file, "$aaaa\n");<br />                        fclose($output_file);<br />                }<br /><br />        }<br />}<br />?>

コードに示すように、1.txt と 2.txt がソートされて新しいファイル result.txt に出力され、その効果は次のようになります。コメント部分のように。書いたレコード数が少ないときは問題ありませんでしたが、両方のテキストに数十万件のレコードがあった場合、効率が著しく低下し、整理するのに約 10 時間かかりました。私は PHP を初めて使用するので、マスターからの指導を求めています。
------解決策のアイデア----------------------
$t = file('data/1.txt', FILE_IGNORE_NEW_LINES);<br />foreach($t as $v) {<br />  list($k, $v) = explode(':', $v);<br />  $a[$k][] = $v;<br />}<br />$t = file('data/2.txt', FILE_IGNORE_NEW_LINES);<br />foreach($t as $v) {<br />  list($k, $v) = explode(':', $v);<br />  $b[$k][] = $v;<br />}<br />foreach($a as $k=>$v) {<br />  if(isset($b[$k])) {<br />    file_put_contents('data/result.txt', join(':', array_merge(array($k), $v, $b[$k])). PHP_EOL, FILE_APPEND);<br />  }<br />}

ネストされたループはなく、遅すぎません

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