すみません~

WBOY
リリース: 2016-06-13 13:28:51
オリジナル
765 人が閲覧しました

アドバイスください~~~~~~~~~~~~~~~~~~~~
ファイル 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 には含まれません

------解決策------------------

PHP コード

関数 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>
ログイン後にコピー
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート