foreach()在文件写入时添加空行

时间:2019-06-18 09:33:35

标签: php

我正在尝试从文件中读取和写入文件! 该文件将始终以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个POST中获取我的值:

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);
}

请注意,我尝试了两种写入文件的方法。

现在,问题在于,每次刷新页面时,代码都会在文件中添加空行,并在$arrayInputs中添加空元素。 每个POST也会进行页面刷新。

我该如何解决?

1 个答案:

答案 0 :(得分:1)

您要在最后一行之后添加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:修改文字,如下所示

foreach ($arrayInputs as $key2 => $value2) {
  if ($key2 != 0) {
    fwrite($currentSettingsFile,PHP_EOL);
  }
  fwrite($currentSettingsFile,$value2);
}

建议3:使用implode写入文件,而无需任何for

fwrite($currentSettingsFile, implode(PHP_EOL, $arrayInputs));

我个人将选择第三个建议。