2

2つのCSVファイルの違いを取得する必要があります。この場合、最新のファイルfile2.csvは、同じ値の行を更新されたバージョンで上書きし、同じデータの行を削除します。

file1.csv

GHI, 0, 0
ABC, 12, 1
DEF, 10, 1

file2.csv

ABC, 8, 1
DEF, 10, 1
GHI, 2, 0

最終的なCSVは次のようになります。

ABC, 8, 1
GHI, 2, 0

phpコード:

<?php
    $file1 = file('file1.csv');
    $file2 = file('file2.csv');

    sort($file1);
    sort($file2);

    var_dump($file1);
    var_dump($file2);

    $diff =  array_diff($file2, $file1);

    var_dump($diff);

    ?>

これを返します

ABC, 8, 1
DEF, 10, 1
GHI, 2, 0

file1.csvを手動で次のように変更すると、次のようになります。

ABC, 12, 1
DEF, 10, 1
GHI, 0, 0

期待どおりにこれを返します。

ABC, 8, 1
GHI, 2, 0

並べ替えられた配列をダンプすると、手動で順序を変更したときと同じように、並べ替え関数が返されるように見えます

ABC, 12, 1
DEF, 10, 1
GHI, 0, 0

しかし、それは同じ最終結果を生み出さないようです。手がかりはありますか?

4

1 に答える 1

1

fileファイルを行に分割しますが、各行にはまだ改行文字が残っています。ただし、最後の行はそうではありません。したがって、ファイルの途中にある同じ行の内容とは異なります。

これを修正するには、最後の要素に改行を追加します。

$file1[count($file1)-1] .= PHP_EOL;
$file2[count($file2)-1] .= PHP_EOL;

または、すべての行からそれらを取り除くこともできます:

array_walk($file1,function(&$a) {$a = trim($a);});
array_walk($file2,function(&$a) {$a = trim($a);});
于 2012-12-30T16:52:15.447 に答える