使用php删除带有批量列表的多行文本文件

时间:2016-12-12 03:05:44

标签: php

我想从带有批量列表的文本文件中删除多行。

我的基本文件RSA* t = RSA_new(); RSA* rsa = PEM_read_RSA_PUBKEY(file, &t, nullptr, nullptr);

file.txt

要删除的行列表line1 line2 line3 line4 line5

bulkdel.txt

期望的输出:

line2
line4

我该怎么做?我只有一个比较脚本,但它没有删除:

line1
line3
line5

1 个答案:

答案 0 :(得分:3)

有很多方法可以做到这一点。

您可以轻松地执行您正在执行的操作并unset您不需要的密钥。

foreach($f as $key => $line) {
    foreach($b as $bulk) {
        if (strpos($line, $bulk) !== false) {
            unset($f[$key]);
        }
    }
}

您还可以创建一个通过引用传递的函数,并使用unset()通过搜索array_search()的值来修改数组:

function bulkRemove(&$f,$b)
    {
        foreach($b as $line) {
            $search =   array_search($line,$f);
            if($search !== false)
                unset($f[$search]);
        }
    }

bulkRemove($f,$b);

您还可以使用array_map()的封闭,并使用array_filter()

删除空
$array = array_filter(array_map(function($v) use ($b) {
        if(!in_array($v,$b))
            return $v;
    },$f));

编辑:由于您使用array_search()选项,因此:

$f  =   array('line1','line2','line3','line4','line5');
$b  =   array('line2','line4');
function bulkRemove(&$f,$b)
    {
        foreach($b as $line) {
            $search =   array_search($line,$f);
            if($search !== false)
                unset($f[$search]);
        }
    }

bulkRemove($f,$b);

echo count($f);
print_r($f);

给你:

3

Array
(
    [0] => line1
    [2] => line3
    [4] => line5
)