php - PHP:替换文件中的行或如果找不到则添加
问题描述
我有一个看起来像这样的文件(messages.txt):
112233|A line of text here.
aabbcc|More text here.
223344|And the list goes on...
和像这样按预期工作的代码:
$filename = 'messages.txt';
$data = file($filename);
file_put_contents($filename, implode('',
array_map(function($data) {
return stristr($data,'aabbcc') ? "aabbcc|This would be a NEW line.\n" : $data;
}, file($filename))
));
因此,这会将找到 aabbcc 的行替换为新行。我该如何编辑它,以便如果找不到该行,它会将其添加到 txt 文件的末尾?有没有一种简单的方法可以做到这一点,或者我需要对代码进行相当多的修改才能使其工作?谢谢。
解决方案
你可以这样做:
$message_exists = false;
$filename = 'messages.txt';
$data = file($filename);
file_put_contents($filename, implode('',
array_map(function($data) use (&$message_exists){
$result = substr($data, 0, strlen('aabbcc|')) === 'aabbcc|';
if($result)
{
$message_exists = true;
}
return $result ? "aabbcc|This would be a NEW line.\n" : $data;
}, file($filename))
));
if(!$message_exists)
{
file_put_contents($filename, "aabbcc|This would be a NEW line.\n", FILE_APPEND);
}
推荐阅读
- git - 由于 Azure git repo 拉取请求而触发 Jenkins 作业
- python - pandas to_csv 将'''、'"'和''转换为'’s'、'â€'、'Â'
- r - 迭代地将变量添加到 R 中的 lm() 函数?
- java - 从包含值的excel文件中获取一行
- python - 将二维数组转换为 [ [ x0 y0 ] [x1 y1] [x2 y2] ] 形式
- assembly - 从屏幕位置获取字符并将其放入字符串中(不起作用)
- jquery - Jquery 数据表排序问题 yyyy-MMMM
- c++ - C++11 多线程生产者/消费者程序挂起
- mongodb - 如果 MongoDB 中的搜索字符串为空,则正则表达式搜索不应返回任何内容
- prometheus - Prometheus 的黑盒导出器中的 3 个 ICMP 阶段是什么意思?