2016-12-12 55 views
1

我想從批量清單的文本文件中刪除多行。使用php刪除多行文本文件與批量清單使用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>'; 
     } 
    } 
} 
+0

嘗試新鮮事物,因爲我們不只是寫代碼,你 –

+0

更新.... ..... – dexter

+0

在你的例子中,你在第二個'for'循環中的'$ bulk'後面缺少''',可能是複製/粘貼錯誤...如果不是......你有一個錯字我解決了。 – Rasclatt

回答

3

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

你可以很容易地做你正在做的事情和unset你不需要的鑰匙。

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

您還可以創建一個功能通過與array_search()尋找一個值按引用傳遞和修改使用unset()數組:

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 
) 
+0

輸出=行1 3號線 line5line1 3號線 line5line1 3號線 LINE5 – dexter

+0

的作品,但輸出使3環(array_search():) – dexter

+0

你是什麼意思?你在使用所有這些嗎? – Rasclatt