2016-12-12 33 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