从php列表中删除项目的最佳方法
我正在尝试从列表B中删除列表A中的项目 这两个在一个文本文件中 示例:a.txt从php列表中删除项目的最佳方法,php,Php,我正在尝试从列表B中删除列表A中的项目 这两个在一个文本文件中 示例:a.txt 1 3 6 b、 文本 我以前尝试过多种方法,但对于大文件,它不能正常工作 $a = file('a.txt', FILE_IGNORE_NEW_LINES); $b = file('b.txt', FILE_IGNORE_NEW_LINES); $n = 'new.txt'; for ($i = 0;$i < count($b);$i++) { if (!in_array($b[$i], $a))
1
3
6
b、 文本
我以前尝试过多种方法,但对于大文件,它不能正常工作
$a = file('a.txt', FILE_IGNORE_NEW_LINES);
$b = file('b.txt', FILE_IGNORE_NEW_LINES);
$n = 'new.txt';
for ($i = 0;$i < count($b);$i++)
{
if (!in_array($b[$i], $a))
{
$c = file_get_contents($n);
$c .= $b[$i] . "\n";
file_put_contents($n, $c);
}
}
$a=file('a.txt',file\u IGNORE\u NEW\u行);
$b=文件('b.txt',文件\u忽略\u新行);
$n='new.txt';
对于($i=0;$i
有没有更好的方法来处理像80k行这样的大文件?这段代码主要改变文件的读写方式,以便第二个文件一次读取一行,而不是在内存中全部读取。输出还使用
FILE\u put\u contents()
中的FILE\u APPEND
,因此无需再次读取文件
第一部分是创建一个a.txt文件数组,该值作为索引,允许您使用isset()
而不是中的数组()
,这将使搜索速度大大加快
然后一次读取第二个文件1行,检查它是否存在,并在需要时添加数据
$fileA = fopen('a.txt', 'r');
$a = [];
while($entry = fgets($fileA))
{
$a[trim($entry)] = true;
}
$fileB = fopen('b.txt', 'r');
$n = 'new.txt';
// Clear the file
file_put_contents($n, '');
while($b = fgets($fileB))
{
if (!isset($a[trim($b)]))
{
file_put_contents($n, $b, FILE_APPEND);
}
}
这段代码主要改变了文件的读写方式,因此第二个文件一次读取一行,而不是在内存中全部读取。输出还使用
FILE\u put\u contents()
中的FILE\u APPEND
,因此无需再次读取文件
第一部分是创建一个a.txt文件数组,该值作为索引,允许您使用isset()
而不是中的数组()
,这将使搜索速度大大加快
然后一次读取第二个文件1行,检查它是否存在,并在需要时添加数据
$fileA = fopen('a.txt', 'r');
$a = [];
while($entry = fgets($fileA))
{
$a[trim($entry)] = true;
}
$fileB = fopen('b.txt', 'r');
$n = 'new.txt';
// Clear the file
file_put_contents($n, '');
while($b = fgets($fileB))
{
if (!isset($a[trim($b)]))
{
file_put_contents($n, $b, FILE_APPEND);
}
}
这两个文件都是80K还是仅仅是一个?你也可以考虑使用<代码> FielyAppEng/<代码> > FielyPuthCopeTunes()/<代码>以保存必须一直读取它。这两个文件都是80K还是仅仅是一个?你也可以考虑使用<代码> FielyAppEnter <代码> >