2

我有两个文件。

第一个有 482 行。第二个只有 519 行。

我想通过使用 php.ini 比较两个文件来找到额外的行。

假设我的第一个文件有这样的行

Mango
Orange
Cherry
Apple 
Blackberry

假设我的第二个文件看起来像这样

Apple 
Orange
Mango
Banana
Cherry
Blackberry

请注意:这些行是随机排列的。现在我想使用 php 脚本来删除相同的行并保留多余的行。例如文件 1 包含行Mango。文件 2 也包含该行,但顺序随机。所以我想删除那条线。

4

7 回答 7

4

将每个文件加载到字符串数组中(例如,使用file_get_contents)。

执行一些循环,对于数组 2 中的每个项目,确定该项目是否存在于数组 1 中。如果存在,则从数组 2 中删除该项目并继续。

完成后,数组 2 将仅包含唯一行。

编辑:

如果您只想删除 File2 中也存在于 File1 中的行,那么您正在寻找唯一值(顺序无关紧要)。一个快速的方法是使用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

通过将每个文件的行读入一个列表来制作两个列表,然后比较它们。遍历 list1 并删除 list2 中未找到的所有项目,反之亦然。

于 2012-02-23T16:47:32.720 回答
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 回答
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 回答