首页 > 解决方案 > 匹配文件中的字符串并删除该行

问题描述

大家好,我正在尝试删除特定记录。用户输入一个值,我试图从现有文件中删除该记录:

<form action="delete.php" method="get">
    Id:<br> <input type="text" name="id">
    <br>
    <input type="submit">
</form>

<?php
   $handle = fopen("Customer1.txt","r");

   while (!feof($handle) ) {
       $line = fgets($handle);
       $a = explode('|',$line); 
       //print_r($a);      

       if(isset($_GET['id']) == $a[0]); {
           $remove = array_shift($a);
           print_r($remove);
       }
       //echo "$a[0]<br>";
   }
?>

标签: phpfile

解决方案


isset返回trueorfalse并且将始终==为非空值,array_shift仅删除您从该行创建的数组的第一个元素,并且您永远不会写入文件。

只需检查每一行,如果它不包含值,则将其添加到结果数组并将该数组写入文件:

if(isset($_GET['id'])) {
   while (!feof($handle) ) {
       $line = fgets($handle);
       $a = explode('|', $line); 

       if($_GET['id'] != $a[0]) { // add lines to result if they don't contain
            $results[] = $line;
       }
   }
}
file_put_contents("Customer1.txt", $results);

但是,如果文件不是很大,只需将这些行读入一个数组并过滤掉包含的内容$_GET["id"]

$lines = file("Customer1.txt");
$lines = array_filter($lines, function($v) { return explode("|", $v)[0] != $_GET["id"]; });
file_put_contents("Customer1.txt", $lines);

推荐阅读