我想从带有批量列表的文本文件中删除多行。
我的基本文件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
答案 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
)