このように2つのcsvファイルの違いを取得する必要があります
comm -13 <(sort file1.csv) <(sort file2.csv) > file3.csv
これは問題なく動作しますが、PHPから同じプロセスを実現する方法、正しい方向を示すためのヒントがいくつかあります。(編集)
ABC, 12, 1
DEF, 10, 1
GHI, 0, 0
ABC, 8, 1
DEF, 10, 1
GHI, 2, 0
最終的なCSVは次のようになります。
ABC, 8, 1
GHI, 2, 0
exec()は使用できないので、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 = file('file1.csv',FILE_IGNORE_NEW_LINES);
$file2 = file('file2.csv',FILE_IGNORE_NEW_LINES);
FILE_IGNORE_NEW_LINESはそれを修正しているようです。
したがって、FILE_IGNORE_NEW_LINESを追加すると、Marcのソリューションはうまく機能します。