我write
字符串data
到for循环中的文本file
中:
$vokatra_res = fopen(RP_MAIN . "vokatra.res","a+");
$p = $vokatra->lireTout(array(), array("type_id")); // getting rows from database
for($l=0 ; $l<$p['cnt'] ; $l++) {
$str = $p[$l]['produit_code'] . '|' . $p[$l]['type_id'] . '|' . $p[$l]['produit_lib'] . "\r\n";
fwrite($vokatra_res, $str);
}
fclose($vokatra_res);
因此,文件末尾有一个空行。那么如何在关闭文件之前删除此空行?
答案 0 :(得分:2)
您可以通过将额外换行添加到除最后一行之外的所有行来避免写入:
$newline = ($l < $p['cnt'] - 1) ? "\r\n" : "";
$str = $p[$l]['produit_code'] . '|' . $p[$l]['type_id'] . '|' . $p[$l]['produit_lib'] . $newline;
仅当循环未处理最后一行数据时,此代码才会填充$newline
变量。 $newline
的内容(无论是否包含&#34; \ r \ n&#34;或不连接)连接到每个字符串的末尾。
<强>附加:强> 三元运算符很难理解;考虑产生相同结果的代码:
if ($l < $p['cnt'] - 1) {
$newline = "\r\n";
else {
$newline = "";
}
答案 1 :(得分:0)
如果您不想在每次迭代中签入,您可以这样做:
$vokatra_res = fopen(RP_MAIN . "vokatra.res","a+");
$p = $vokatra->lireTout(array(), array("type_id")); // getting rows from database
for($l=0 ; $l<$p['cnt']-1 ; $l++) {
$str = $p[$l]['produit_code'] . '|' . $p[$l]['type_id'] . '|' . $p[$l]['produit_lib'] . "\r\n";
fwrite($vokatra_res, $str);
}
$str = $p[$l]['produit_code'] . '|' . $p[$l]['type_id'] . '|' . $p[$l]['produit_lib'];
fwrite($vokatra_res, $str);
fclose($vokatra_res);
您将最后一行留在for循环之外。你不要把“\ r \ n”放在上面。
否则:
$vokatra_res = fopen(RP_MAIN . "vokatra.res","a+");
$p = $vokatra->lireTout(array(), array("type_id")); // getting rows from database
for($l=0 ; $l<$p['cnt']; $l++) {
$str = $p[$l]['produit_code'] . '|' . $p[$l]['type_id'] . '|' . $p[$l]['produit_lib'];
if ($l < $p['cnt'] - 1) {
$str .= '\r\n',
}
fwrite($vokatra_res, $str);
}
fclose($vokatra_res);
如何在循环期间检查最后一行是不是很重要。重要的是避免双重写入文件,如:
for($l=0 ; $l<$p['cnt']; $l++) {
$str = $p[$l]['produit_code'] . '|' . $p[$l]['type_id'] . '|' . $p[$l]['produit_lib'];
fwrite($vokatra_res, $str);
if ($l < $p['cnt'] - 1) {
fwrite($vokatra_res, '\r\n');
}
}