2

2つのファイルがあります。

最初のものは482行あります。2つ目は519行しかありません。

phpを使用して2つのファイルを比較することにより、余分な行を見つけたいと思います。

私の最初のファイルにこのような行があるとしましょう

Mango
Orange
Cherry
Apple 
Blackberry

そして、私の2番目のファイルが次のようになっているとしましょう

Apple 
Orange
Mango
Banana
Cherry
Blackberry

注意:行はランダムな順序になっています。ここで、phpスクリプトを使用して同じ行を削除し、余分な行を保持したいと思います。たとえば、ファイル1には行が含まれていますMango。ファイル2にもその行が含まれていますが、順序はランダムです。だから私はその行を削除したいと思います。

4

7 に答える 7

4

各ファイルを文字列配列にロードします(たとえば、file_get_contentsを使用)。

配列2のすべてのアイテムについて、そのアイテムが配列1に存在するかどうかを判断するループを実行します。存在する場合は、配列2からアイテムを削除して続行します。

完了すると、配列2には一意の行のみが含まれます。

編集:

File1にも存在するFile2の行を削除したいだけの場合は、一意の値を探しています(順序は重要ではありません)。これを行う簡単な方法は、array_diff関数を使用することです。

次に例を示します。

$file1 = array('Mango', 'Orange', 'Cherry', 'Apple', 'Blackberry');
$file2 = array('Apple', 'Orange', 'Mango', 'Banana', 'Cherry', 'Blackberry');

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

var_dump($diff);

// Output
array
    3 => string 'Banana' (length=6)

最初の部分で述べたようにループを使用してこれを手動で行う場合は、次のようにします。

// Loop over every value in file2
for($i = count($file2) - 1; $i >= 0; $i--)
{
    // Compare to every value in file1; if same, unset (remove) it
    foreach($file1 as $v)
        if ($v == $file2[$i])
        {
            unset($file2[$i]);
            break;
        }
}
// Reindex the array to remove gaps
$output = array_values($file2);
var_dump($output);

// Output
array
    0 => string 'Banana' (length=6)
于 2012-02-23T16:47:45.727 に答える
1

私はJYeltonが提案したのと同じアプローチを取りました。

ここでのデモ:http: //codepad.org/lCa68G76

<?

$file1 = array(
    'Mango',
    'Orange',
    'Cherry',
    'Apple',
    'Blackberry'
);

$file2 = array(
    'Apple',
    'Orange',
    'Mango',
    'Banana',
    'Cherry',
    'Blackberry'
);


foreach($file2 as $line)
{
    if (!in_array($line, $file1))
    {
        $output[] = $line;
    }
}

var_dump($output);


?>
于 2012-02-23T16:58:37.270 に答える
0

これはPHPスクリプトで行う必要がありますか?これはbashで非常に簡単に実現できます。

cat file1 file2 | sort | uniq > uniques.txt
于 2012-02-23T17:02:34.227 に答える
0
// read in both files
$file1 = file($filename1);
$file2 = file($filename2);

// calculate the entries that are in both files
$inBothFiles = array_intersect($file1, $file2);

// filter elements found in both files from file2 
$newFile2 = array_diff($file2, $inBothFiles);
于 2012-02-23T17:04:05.703 に答える
0

各ファイルの行を1つのリストに読み込んで、2つのリストを作成し、それらを比較します。list1に目を通し、list2にないすべてのアイテムを削除します。その逆も同様です。

于 2012-02-23T16:47:32.720 に答える
0

それを行うためのスニペットはたくさんあります:

http://web.archive.org/web/20080506155528/http://software.zuavra.net/inline-diff/

https://github.com/paulgb/simplediff/blob/5bfe1d2a8f967c7901ace50f04ac2d9308ed3169/simplediff.php(アレイのみ)

http://www.holomind.de/phpnet/diff.src.php

于 2012-02-23T17:00:04.347 に答える
0
<?php

$testOne = 'Apple Orange Carrot Banana';
$testTwo = 'Apple Orange Carrot';

$tTwo = explode(' ', $testTwo);
$tOne = explode(' ', $testOne);

foreach($tOne as $first) {
    foreach($tTwo as $second) {
        if ($second == $first) {
            echo 'Both arrays contain: ' . $second . '</br>';
        }       
    }
}

?>

両方の配列に値が含まれているかどうかを確認してください。

于 2012-02-23T17:00:52.027 に答える