php - foreach() 在文件写入时添加空行
问题描述
我正在尝试从文件中读取和写入!该文件将始终以 6 行开头。默认设置文件如下所示:
10
50
255 255 255
0 255 0
0 255 0
0 255 0
我有一个默认设置文件和另一个当前设置文件,其中完成了读取和写入。
我正在使用 3 个全局声明的数组来读取和写入值:
$arrayInputs = array();
$arrayDefaults = array();
$arrayColorsHEX = array();
我从默认文件开始:
if(filesize($inputsFilePath)<=0) {
if ($defaultSettingsFile) {
// echo "<br>Reading from $defaultFilePath<br>";
// Fill $arrayDefaults
$arrayDefaults = explode(PHP_EOL, fread($defaultSettingsFile, filesize($defaultFilePath)));
fclose($defaultSettingsFile);
// Output $arrayDefaults
var_dump($arrayDefaults);
foreach ($arrayDefaults as $keyD => $valueD) {
$arrayInputs[$keyD] = $arrayDefaults[$keyD];
}
var_dump($arrayInputs);
$Timer = $arrayDefaults[0];
$Brightness = $arrayDefaults[1];
$arrayColorsHEX[0] = RGBtoHexadecimal($arrayDefaults[2]);
$arrayColorsHEX[1] = RGBtoHexadecimal($arrayDefaults[3]);
$arrayColorsHEX[2] = RGBtoHexadecimal($arrayDefaults[4]);
$arrayColorsHEX[3] = RGBtoHexadecimal($arrayDefaults[5]);
}
}
我填写$arrayDefaults
和$arrayInputs
。因此,两个数组上的 var_dump 将如下所示:
/var/www/mysite/inputs.php:53:
array (size=7)
0 => string '10' (length=2)
1 => string '50' (length=2)
2 => string '255 255 255' (length=11)
3 => string '0 255 0' (length=7)
4 => string '0 255 0' (length=7)
5 => string '0 255 0' (length=7)
6 => string '' (length=0)
/var/www/mysite/inputs.php:57:
array (size=7)
0 => string '10' (length=2)
1 => string '50' (length=2)
2 => string '255 255 255' (length=11)
3 => string '0 255 0' (length=7)
4 => string '0 255 0' (length=7)
5 => string '0 255 0' (length=7)
6 => string '' (length=0)
我不喜欢它在数组中添加另一个空元素的事实,但我无法找到修复它的方法。
我继续使用当前的设置文件:
else {
if($currentSettingsFile) {
// echo "<br>Reading from $inputsFilePath<br>";
// Fill $arrayInputs
$arrayInputs = explode(PHP_EOL, fread($currentSettingsFile, filesize($inputsFilePath)));
$closeFlag = fclose($currentSettingsFile);
// Output/echo $arrayInputs
// var_dump($arrayInputs);
// $arrayLength = strlen($arrayInputs);
$Timer = $arrayInputs[0];
$Brightness = $arrayInputs[1];
$n_1 = 0;
foreach ($arrayInputs as $key1 => $value1) {
$n_1 = $key1;
}
echo "<br>key1 = $n_1";
if($n_1>1) {
$i = 2;
while(isset($arrayInputs[$i]) && $i<$n_1-1) {
// echo "<br>arrayInputs[$i]= ".$arrayInputs[$i];
$arrayColorsHEX[$i-2] = RGBtoHexadecimal($arrayInputs[$i]);
// echo "<br>arrayColorsHEX[$i-2]".$arrayColorsHEX[$i-2];
// echo "<br>i = $i";
$i++;
// echo "<br>END OF WHILE<br/>";
}
}
} //if($currentSettingsFile)
}
然后我从 6 个帖子中获取我的价值观:
if(isset( $_POST['save_values'])) {
if(!empty($_POST['getTimer'])) {
$Timer = $_POST['getTimer'];
$arrayInputs[0] = $Timer;
}
if(!empty($_POST['getBrightness'])) {
$Brightness = $_POST['getBrightness'];
$arrayInputs[1] = $Brightness;
}
}
if(isset( $_POST['save_color1'])) {
if(!empty($_POST['getColors1'])) {
$arrayColorsHEX[0] = $_POST['getColors1'];
// echo "<br>POSTarrayColorsHEX[0]= ".$arrayColorsHEX[0];
$arrayInputs[2] = HexadecimalToRGB($arrayColorsHEX[0]);
// echo "<br>arrayInputs[2]= ".$arrayInputs[2];
}
}
if(isset( $_POST['save_color2'])) {
if(!empty($_POST['getColors2'])) {
$arrayColorsHEX[1] = $_POST['getColors2'];
// echo "<br>arrayColorsHEX[1]= ".$arrayColorsHEX[1];
$arrayInputs[3] = HexadecimalToRGB($arrayColorsHEX[1]);
// echo "<br>arrayInputs[3]= ".$arrayInputs[3];
}
}
if(isset( $_POST['save_color3'])) {
if(!empty($_POST['getColors3'])) {
$arrayColorsHEX[2] = $_POST['getColors3'];
// echo "<br>arrayColorsHEX[2]= ".$arrayColorsHEX[2];
$arrayInputs[4] = HexadecimalToRGB($arrayColorsHEX[2]);
// echo "<br>arrayInputs[4]= ".$arrayInputs[4];
}
}
if(isset( $_POST['save_color4'])) {
if(!empty($_POST['getColors4'])) {
$arrayColorsHEX[3] = $_POST['getColors4'];
// echo "<br>arrayColorsHEX[3]= ".$arrayColorsHEX[3];
$arrayInputs[5] = HexadecimalToRGB($arrayColorsHEX[3]);
// echo "<br>arrayInputs[5]= ".$arrayInputs[5];
}
}
最后我写在文件中:
if(!$closeFlag) fclose($currentSettingsFile);
$currentSettingsFile = fopen($inputsFilePath, "w");
if($currentSettingsFile) {
// echo "<br>Writing in $inputsFilePath<br>";
// var_dump($arrayInputs);
foreach ($arrayInputs as $key2 => $value2) {
fwrite($currentSettingsFile,$value2.PHP_EOL);
}
// for($k = 0; $k < $n_2; $k++) {
// fwrite($currentSettingsFile,$arrayInputs[$k].PHP_EOL);
// // echo "<br>arrayInputs[$k]= $arrayInputs[$k]";
// }
fclose($currentSettingsFile);
}
请注意,我尝试了 2 种写入文件的方法。
现在,问题是对于每次页面刷新,代码都会在文件中添加一个空行,在$arrayInputs
. 还为每个POST
.
我怎样才能解决这个问题 ?
解决方案
您在最后一行之后添加 EOL。这就是explode
返回 6 条记录的原因。
关闭文件后,内容看起来像这样(注意最后的 EOL)
line1 EOL line2 EOL line3 EOL line4 EOL line5 EOL line 6 EOL
您希望您的文件看起来像这样(最后没有任何 EOL):
line1 EOL line2 EOL line3 EOL line4 EOL line5 EOL line 6
要解决此问题,您可以尝试以下方法之一:
建议1:在爆炸前修剪文件内容:
换行
explode(PHP_EOL, fread($currentSettingsFile, filesize($inputsFilePath)));
到
explode(PHP_EOL, trim(fread($currentSettingsFile), filesize($inputsFilePath)));
建议2:修改for的写法,如下
foreach ($arrayInputs as $key2 => $value2) {
if ($key2 != 0) {
fwrite($currentSettingsFile,PHP_EOL);
}
fwrite($currentSettingsFile,$value2);
}
建议 3:使用 implode 写入文件,无需任何for
fwrite($currentSettingsFile, implode(PHP_EOL, $arrayInputs));
就个人而言,我会选择第三个建议。
推荐阅读
- javascript - 使用 for 循环 JS 过滤
- c# - 当游戏对象旋转时计算圆上的角点
- c# - 无法在 Specflow 文件中将类型“int”转换为“string”
- javascript - Javascript在嵌套对象中查找
- highcharts - Highchart / Highstock 堆栈柱形图一次显示一个系列的工具提示
- java - JMeter - 生成时隙并保存到文件
- c# - 在 Xamarin.Forms 中创建、保存和显示项目
- r - `$<-.data.frame`(`*tmp*`, "P_value", value = 9.66218350888067e-05) 中的错误:替换有 1 行,数据有 0
- java - 如何在 UBUNTU 中为一个简单的 java 程序设置 mbrola
- python - 数组必须具有相同的长度 - 导致第 1 行的“主图像 URL”列的剩余列和数据太长 - 不会太长