Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从php列表中删除项目的最佳方法_Php - Fatal编程技术网

从php列表中删除项目的最佳方法

从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))

我正在尝试从列表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))
    {
        $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 <代码> > >()/<代码>以保存必须一直读取它。