アドバイスください~~~~~~~~~~~~~~~~~~~~
ファイル A.txt の内容は次のとおりです
123
222
333
444
555
666
777
888
999
000
ファイル B.txt の内容は次のとおりです
123
222
444
666
000
データベースを使わずにA.txtからB.txtのデータを削除するにはどうすればよいですか?実際にはAとBには約1万個のデータがあります。 。
得られた結果はC.txtで、内容は次のとおりです
333
555
777
888
999
私のアイデアは次のとおりですA、B それぞれを配列に読み取り、A を走査します。A の特定の行のデータが B にない場合、そのデータを C に書き込みます。
この考えが正しいのか、効率的なのかわかりません
-----解決策------ -
私もあなたと同じことを考えており、配列を読み取ってマージしています。
データ量が多いことを考慮して、たとえば 2 つのファイルを 100 行ずつ読み取るなど、段階的に読み取ることができます。 PHP には非常に便利な特別なマージ関数 array_merge があります。
------解決策------------------
A
array_diff ( array $array1 , array $array2 [, array $ ... ] )
返された配列には、array1 のすべての値が含まれますが、他のパラメータ array には含まれません
------解決策------------------
関数 w($cont, $filename) { if (is_writable($filename)) { if (!$handle = fopen($filename, 'a')) { echo "ファイル $filename を開けません"; 出口; } if (fwrite($handle, $cont) === FALSE) { echo "ファイル $filename に書き込めません"; 出口; } echo "$somecontent をファイル $filename に正常に書き込みました"; fclose($handle); } それ以外 { echo "ファイル $filename は書き込み可能ではありません"; } } $cont_a = file_get_contents("/パス/ファイル名A"); $arrA =explode("n", $cont_a); $cont_b = file_get_contents("/パス/ファイル名B"); $arrB =explode("n", $cont_b); $arrNewB = array_diff($arrB, $arrA); $cont_newb = implode("n", $arrNewB); $arrC = array_diff($arrA, $arrB); $cont_c = implode("n", $arrC); w($cont_newb); w($cont_c); <br><font color="#e78608">------解決策------------------</font><br> array_diff 関数 + file 関数で十分だと思われます。どれくらい効率的かを試してみます。 <div class="clear"></div>