我遇到了数组和文件写入的问题,我想要做的是获取一个文件,然后将其复制到另一个文件中,除非添加了格式。
具体来说,这个:
第1行 第2行 第3行
会变成这样:
<br /><hr />Line 1
<br /><hr />Line 2
<br /><hr />Line 3
而且我已经完成了这件事,但奇怪的事情发生了。它不是在一行上格式化,而是换行并继续前进。喜欢这个
<br />1
THE END<br />7
THE END<br />0
THE END<br />Red
THE END<br />Silent
THE END<br />No ChangesTHE END
我的代码是:
<?php
$filename1 = "directorx_OLDONE.txt";
$filename2 = "directorx_NEWONE.txt";
$file1 = fopen($filename1, "r") or exit ("No");
$file2 = fopen($filename2, "w") or exit ("No");
while (!feof($file1)){
$listArrayf1[] = fgets($file1);
}
fclose($file1);
echo var_dump($listArrayf1) . "<br /><br />";
$entries = count($listArrayf1) - 1;
echo $entries;
for($i=0;$i<=$entries;$i++){
$listArrayf2[] = "<br />".$listArrayf1[$i]."THE END";
fwrite($file2, $listArrayf2[$i]);
}
fclose($file2);
echo var_dump($listArrayf2);
/*
Open file1, r
Open file2, w
While it's not the end of the file, add each line of file1 to an array.
Count the number of lines in file1 and call it Entries. -1 because gotta start at 0.
Make a new array with the values of the old one, but with tags before and after it.
*/
?>
我确信有一种更好的方法来实现我正在尝试的最终目标,即检测输入到表单中的某些单词,(这可能比制作输入内容的格式化和非格式化副本更好的方法。)但我的PHP词汇是有限的,我想在学习如何更容易之前找出长期的,先决条件的困难方法。
起初我以为是因为我正在使用返回键手动编写OLDFILE。所以我创建了一个脚本来使用\ n来代替它,它没有改变任何内容。
答案 0 :(得分:2)
呃:)
首先,请查看var_dump并检查函数返回的内容(没有,所以正确使用是var_dump( ...); echo "<br />";
)
其次,fgets
读取字符串包括换行符,所以我猜你在字符串中看到的内容是这样的:
string( 10) "abcdefghi
"
因此,您必须手动删除换行符,例如trim。
接下来,我建议(至少)查看foreach。
所以我把整个循环写成:
foreach( $listArrayf1 as $row){
$row = "<br /><hr />". trim( $row)."THE END";
fwrite($file2, $row);
$listArrayf2[] = $row;
}
您也可以使用foreach( $listArrayf1 as &$row)
,最后$listArrayf1
将包含与$listArrayf2
完全相同的内容。当您需要保留所有其他空格时,您应该使用$row = substr( $row, 0, -1);
btw:你可以编写普通代码,在textarea中标记它,然后点击ctrl+k
它将缩进4个空格
答案 1 :(得分:1)
fgets
返回每行末尾的换行符,作为其输入的一部分。这就是你的“额外”换行符的来源。
更改此
$listArrayf1[] = fgets($file1);
到此:
$listArrayf1[] = rtrim(fgets($file1), "\r\n");
这将从返回值的末尾删除换行符,并使字符串格式化为预期。
然而,就像你自己说的那样,你真的是以迂回的方式做事。您可以将所有file1读入一个只有
的数组中$listArrayf1 = file($filename1);
就是这样。没有循环,没有fopen
,换行没有问题。寻找最合适的做事方式是值得的。