这是我在互联网上发布的第一篇有关编码帮助的帖子,请耐心等待! 我已经在互联网上找到开放代码几年并修改它以做我想要的但是我似乎遇到了这个我确信非常简单的墙。如果你愿意能帮助我,我将非常感激。
我有以下页面:
<?php
$text = $_REQUEST['message'];
$f = file_get_contents("all.txt");
$f = explode(", ", $f);
function modFile($pos, $tothis, $inthis)
{
foreach($inthis as $pos => $a){
}
$newarr = implode("\r\n", $inthis);
$fh = fopen("example.txt", "w");
fwrite($fh, $newarr);
fclose($fh);
}
modFile(4, '', $f);
我有一个文件(all.txt),内容如下:
11111111111, 22222222222, 33333333333, 44444444444
我希望这样显示:
11111111111
22222222222
33333333333
44444444444
并添加一个空格,然后在每行的文本相同的每个数字之后添加一些文本:
11111111111 text here
22222222222 text here
33333333333 text here
44444444444 text here
我有一个html表单,它传递要附加到每一行的自定义文本。 我需要保持文件all.txt不变,然后使用不同的名称保存新格式化的文件。
我已经尝试将变量放入我目前拥有“\ r \ n”的内爆中,但这不起作用。
非常感谢任何帮助。
提前致谢!
答案 0 :(得分:2)
关于您的代码的一些注意事项:您正在将$pos
传递给该函数,但它将在foreach
中被覆盖。 foreach
也是空的,那有什么用呢?我也没有看到你在任何地方使用$text
。
要获得所需的输出,请尝试以下方法:
file_put_contents(
'/path/to/new.txt',
preg_replace(
'/[^\d+]+/',
' some text' . PHP_EOL,
file_get_contents('all.txt')
)
);
模式[^\d+]+
将匹配任何不是连续数字的字符串,并将其替换为“some text”和新行。
实现相同的更复杂的版本将是:
file_put_contents(
'/path/to/new.txt',
implode(PHP_EOL, array_map(
function ($number) {
$message = filter_var(
$_POST['message'], FILTER_SANITIZE_SPECIAL_CHARS
);
return sprintf('%s %s', trim($number), $message);
},
array_filter(str_getcsv(file_get_contents('/path/to/all.txt')))
)
));
这将(由内而外):
如果上面的内容太难理解,这里有一个使用临时变量且没有lambda的版本:
$allTxtContent = file_get_contents('/path/to/all.txt');
$numbers = array_filter(str_getcsv($allTxtContent));
$message = filter_var($_POST['message'], FILTER_SANITIZE_SPECIAL_CHARS);
$numbersWithMessage = array();
foreach ($numbers as $number) {
$numbersWithMessage[] = sprintf('%s %s', trim($number), $message);
};
$newString = implode(PHP_EOL, $numbersWithMessage);
file_put_contents('/path/to/new.txt', $newString);
它做同样的事情。
答案 1 :(得分:0)
你的foreach()关闭括号位于错误的位置。您错过了运行新文件创建执行的确切部分。这里:
$text = $_REQUEST['message'];
$f = file_get_contents("all.txt");
$f = explode(", ", $f);
function modFile($pos, $tothis, $inthis, $text){
$fh = fopen("example.txt", "w");
foreach($inthis as $pos => $a){
$newarr = $a." ".$text."\r\n";
fwrite($fh, $newarr);
}
fclose($fh);
}
modFile(4, "", $f, $text);
这是为了根据需要格式化新文件,但是,您没有传递要附加到新文件的新$ text ['message']。您可以修改mod_file()方法,也可以在运行时在foreach()循环中传递它。
编辑*刚刚更新了整个代码,现在应该是您的目标。如果是,请将答案标记为已接受。