PHP在向文件写入文本时防止额外的空行



关于foreach()循环和将数组写入其中的文本文件,我遇到了一个小问题。循环为我提供了我想要的文件格式,但它也在文件末尾添加了(正如我被告知的)一个不想要的空行。

下面是我的代码:

foreach($data_arr as $data => $input)
{ fwrite($fh, $data . ":" . $input . "n") or die("something went wrong here"); }

是否有一种方法可以防止这种情况发生,并且在到达数组末尾时不添加n ?

你可以这样做:

$data_array = ['c', 'h', "hf"];
$last = count($data_array) - 1; #size of the array
foreach($data_array as $data => $input)
{ 
$separator = $data == $last ? "" : "n"; #if is last, then seperator isn't a back to line
fwrite($fh, $data . ":" . $input . $separator);
}

检查当前索引是否为最后一个,然后最后添加"n"到字符串

$last_index = count($data_arr)-1;
foreach ($data_arr as $data => $input)
{ 
$string = $data . ":" . $input;
if ($data != $last_index) 
{
$string .= "n";
}

fwrite($fh, $string) or die("something went wrong here"); 
}

确定您是否在最后时间做某事是很麻烦的-对于初学者来说,您需要计数项,然后您需要一个循环索引来与该计数进行比较…

更容易确定,您是否在第一次时间做某事。因此,只需在这里反转您的逻辑-不要尝试输出"所有行,每个行后面都有一个换行符,除了最后一个",而是输出"所有行之前都有一个换行符,除了第一个">

。你可以使用一个简单的布尔标志:

$is_first_line = true;
foreach($data_arr as $data => $input) {
fwrite($fh, ($is_first_line ? "" : "n") . $data . ":" . $input);
$is_first_line = false;
}

或者您只是在行数据之前一直附加一个变量-并且在第一次迭代时简单地使该变量为"空",然后为所有以下变量填充换行字符:

$prefix = "";
foreach($data_arr as $data => $input) {
fwrite($fh, $prefix . $data . ":" . $input);
$prefix = "n";
}

最新更新