【问题标题】:Match string in file and delete that line匹配文件中的字符串并删除该行
【发布时间】:2021-06-09 20:17:01
【问题描述】:

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

<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>";
   }
?>

【问题讨论】:

  • 你应该在实际的问题正文中写正文 - 不是在标题中!标题应该简短而甜美,并且只提供一些相关的上下文
  • isset(ANYTHING) 返回一个布尔值,TRUE 或 FALSE
  • 如果测试后没有;所以if(isset($_GET['id']) == $a[0]);不好
  • 您不会将任何内容重写到文件中,它会保持原样
  • 你放弃了吗?

标签: php file


【解决方案1】:

isset 返回truefalse 并且将始终== 为非空值,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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-25
    • 1970-01-01
    • 1970-01-01
    • 2019-04-26
    • 1970-01-01
    • 2019-01-27
    • 1970-01-01
    相关资源
    最近更新 更多