使用 PHP 的 file 函数读取文件,并将文件中的每一行转换为一个数组。使用 PHP 的 array_intersect 函数比较两个数组,并找出它们共同拥有的值。为了避免内存问题,可以使用逐行比较的方法。具体来说,您可以打开两个文件的句柄,然后逐行读取每个文件,比较它们是否相同。$file1 = fopen('file1.txt', 'r');
$file2 = fopen('file2.txt', 'r');
// 逐行比较两个文件
while (($line1 = fgets($file1)) !== false) {
while (($line2 = fgets($file2)) !== false) {
if ($line1 === $line2) {
echo $line1; // 输出相同的记录
}
}
// 重置文件指针,以便下次比较
fseek($file2, 0);
}
// 关闭文件句柄
fclose($file1);
fclose($file2);
请注意,这种方法可能会很慢,并且可能会占用大量的内存和 CPU 资源。如果您的文件非常大,建议考虑使用其他工具或算法来处理这种情况。当需要处理大型文件时,为了避免占用大量的内存,可以使用逐行比较的方式。$file1 = fopen('file1.txt', 'r');
$file2 = fopen('file2.txt', 'r');
// 初始化文件1的当前行和文件2的当前行
$currentLine1 = fgets($file1);
$currentLine2 = fgets($file2);
// 循环比较两个文件的每一行,直到其中一个文件到达文件末尾
while (!feof($file1) && !feof($file2)) {
// 如果当前行相等,输出当前行并更新两个文件的当前行
if ($currentLine1 === $currentLine2) {
echo $currentLine1;
$currentLine1 = fgets($file1);
$currentLine2 = fgets($file2);
}
// 如果当前行不相等,比较两个行的大小并更新当前行小的那个文件的当前行
elseif ($currentLine1 < $currentLine2) {
$currentLine1 = fgets($file1);
} else {
$currentLine2 = fgets($file2);
}
}
// 关闭文件句柄
fclose($file1);
fclose($file2);
该代码使用逐行比较的方式比较两个文件,因此不需要将整个文件读入内存。它首先读取每个文件的第一行并将其作为当前行,然后比较当前行。如果两个行相等,则输出当前行并更新两个文件的当前行。否则,它比较两个行的大小,并更新当前行小的那个文件的当前行。该过程一直持续到其中一个文件到达文件末尾。请注意,该代码假定两个文件都是已经排序好的,因此可以逐行比较。如果文件没有排序,您需要首先对文件进行排序,然后才能使用这个代码来找出相同的记录。