簡體   English   中英

使用php刪除帶有批量列表的多行文本文件

[英]Delete multiple line text file with bulk list using php

我想從帶有批量列表的文本文件中刪除多行。

我的基本文件file.txt

line1
line2
line3
line4
line5

要刪除bulkdel.txt的行列表

line2
line4

期望的輸出:

line1
line3
line5

我怎樣才能做到這一點? 我只有一個比較腳本,但它沒有刪除:

$b = file('bulkdel.txt');
$f  = file('file.txt');

foreach($f as $line) {
    foreach($b as $bulk) {
        if (strpos($line, $bulk) !== false) {
            echo $line .'<br>';
        }
    }
}

有很多方法可以做到這一點。

您可以輕松地執行您正在執行的操作並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
)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM