在文件中搜索字符串并替换该行中字符后面的所有内容

我希望使用 PHP 打开一个文件(参见下面的示例),逐行搜索字符串$colour并用.=$value


之前的file.txt:


red=0

green=23

blue=999

yellow=44

如果我的$value是"1"并且我的颜色是"blue",我的文件应该更改为:


red=0

green=23

blue=1

yellow=44

到目前为止我的代码是:


function write($colour, $value) {

    $file = 'path';

    $file_contents = file_get_contents($file);

    $file_contents = str_replace($colour, $value, $file_contents);

    file_put_contents($file, $file_contents);

}

然而,这只需要替换为$colour($value不是“=”之后的所有内容),请参见下面的输出:


red=0

green=23

1=999

yellow=44

我该怎么做呢?


慕标琳琳
浏览 72回答 2
2回答

沧海一幻觉

问题是您只是将颜色文本替换为中的值$file_contents = str_replace($colour, $value, $file_contents);但这并不能取代整行。使用preg_replace(),您可以替换以颜色开头的内容,然后=将其替换为...$file_contents = preg_replace("/{$colour}=.*/", "{$colour}={$value}", $file_contents);

BIG阳

发生这种情况是因为您的代码仅用指定的值替换颜色。为此,您必须逐行加载文件,按 = 分解以分别获得颜色和值,然后再次调整和存储。或者使用正则表达式。我想提出不同的方法。而不是对作为字符串加载的文件进行操作,而是将文件作为数组加载。有一个函数可以实现此目的:parse_ini_file。<?php// load the file to array with elements key => value$data = parse_ini_file('conf.txt');var_dump($data);// change the data in array however you want - here i add 1 to red everytime this script is called, but it can be whatever: $data['red'] = 2; or similar$data['red']++;// now just build the contents of the file again and save it$contents = '';foreach ($data as $key => $value) {&nbsp; $contents .= $key.'='.$value.PHP_EOL;}file_put_contents('conf.txt', $contents);结果:// this is how the file looks like at startcat conf.txt&nbsp;red=0green=23blue=1yellow=44// this is how $data looksarray(4) {&nbsp; ["red"]=>&nbsp; string(1) "0"&nbsp; ["green"]=>&nbsp; string(2) "23"&nbsp; ["blue"]=>&nbsp; string(1) "1"&nbsp; ["yellow"]=>&nbsp; string(2) "44"}// and the file after the executioncat conf.txt&nbsp;red=1green=23blue=1yellow=44更改$data['red']++;为$data[$color] = $value;将其放入函数中即可。
打开App,查看更多内容
随时随地看视频慕课网APP