php - 匹配文件中的字符串并删除该行
问题描述
大家好,我正在尝试删除特定记录。用户输入一个值,我试图从现有文件中删除该记录:
<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
返回true
orfalse
并且将始终==
为非空值,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);
推荐阅读
- windows - 64 位 Ntdll 有 x86 指令集吗?
- r - 无法从脚本导出环境变量
- mongodb - 使用 Tailable ReactiveMongo 扩展 Spring WebFlux
- ios - XCode 11.4 - 在 UITest 中重新安装应用程序失败:“找不到已安装的应用程序”
- java - 如何在从 xml 文件加载配置时给出 jooq 生成器自定义策略的地址?
- c# - RestSharp 错误:从 result.Data 中给出 null
- php - 显示带有翻译的产品表中的所有数据,但如果产品没有翻译,则使用默认语言显示
- react-native - Razorpay sucessCallBack() 后 React Native 应用程序关闭
- php - 如何在 php 中使用 get 方法发送数据
- javascript - 调用一个动作来更新本地存储(无需 API 调用)——redux 持久化,反应原生