2 回答
TA贡献1824条经验 获得超5个赞
问题是您只是将颜色文本替换为中的值
$file_contents = str_replace($colour, $value, $file_contents);
但这并不能取代整行。
使用preg_replace()
,您可以替换以颜色开头的内容,然后=
将其替换为...
$file_contents = preg_replace("/{$colour}=.*/", "{$colour}={$value}", $file_contents);
TA贡献1859条经验 获得超6个赞
发生这种情况是因为您的代码仅用指定的值替换颜色。为此,您必须逐行加载文件,按 = 分解以分别获得颜色和值,然后再次调整和存储。或者使用正则表达式。
我想提出不同的方法。而不是对作为字符串加载的文件进行操作,而是将文件作为数组加载。有一个函数可以实现此目的: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) {
$contents .= $key.'='.$value.PHP_EOL;
}
file_put_contents('conf.txt', $contents);
结果:
// this is how the file looks like at start
cat conf.txt
red=0
green=23
blue=1
yellow=44
// this is how $data looks
array(4) {
["red"]=>
string(1) "0"
["green"]=>
string(2) "23"
["blue"]=>
string(1) "1"
["yellow"]=>
string(2) "44"
}
// and the file after the execution
cat conf.txt
red=1
green=23
blue=1
yellow=44
更改$data['red']++;为$data[$color] = $value;将其放入函数中即可。
- 2 回答
- 0 关注
- 97 浏览
添加回答
举报