Php 重新格式化文件的内容

Php 重新格式化文件的内容,php,foreach,while-loop,fopen,explode,Php,Foreach,While Loop,Fopen,Explode,我有一个名为“data.txt”的文件。在这个文件中,有30行字符串都具有相同的长度。看起来是这样的: 2QA4ZRDUT IDVLTLZSC 4GYC3HCMV 1W6409JD5 70P7U66TE 2QA4ZRDUT;IDVLTLZSC;4GYC3HCMV;1W6409JD5;70P7U66TE; NGN1TGF6G;JWVI7LSIZ;U99TMVXXK;KLBDMRPQV;MEFKLUO3; 。。。等等 我现在要做的是重新格式化这些行。我想在一行5个字符串,用“;”分隔。在那之后,

我有一个名为“data.txt”的文件。在这个文件中,有30行字符串都具有相同的长度。看起来是这样的:

2QA4ZRDUT
IDVLTLZSC
4GYC3HCMV
1W6409JD5
70P7U66TE
2QA4ZRDUT;IDVLTLZSC;4GYC3HCMV;1W6409JD5;70P7U66TE;
NGN1TGF6G;JWVI7LSIZ;U99TMVXXK;KLBDMRPQV;MEFKLUO3;
。。。等等

我现在要做的是重新格式化这些行。我想在一行5个字符串,用“;”分隔。在那之后,我想要一条新线路和下一条5。最后,它应该是这样的:

2QA4ZRDUT
IDVLTLZSC
4GYC3HCMV
1W6409JD5
70P7U66TE
2QA4ZRDUT;IDVLTLZSC;4GYC3HCMV;1W6409JD5;70P7U66TE;
NGN1TGF6G;JWVI7LSIZ;U99TMVXXK;KLBDMRPQV;MEFKLUO3;
。。。以此类推,直到文件的全部内容都像这样重新格式化

在过去的几个小时里,我一直试图通过使用for、foreach和while循环来实现这一点,但我只得到了一行。我希望有人能帮助我,因为我对PHP没有那么丰富的经验

这是“data.txt”的内容:

诸如此类:

<?php

$oldf=fopen('data.txt','r');
$newf=fopen('data_new.txt','w');
$i=0;
while(!feof($oldf))
{
    $i++;
    $line=fgets($oldf);
    fwrite($newf,$line.';');
    if($i%5==0)
       fwrite($newf,"\n");
}
fclose($oldf);
fclose($newf);
试试这个:

<?php
  $file_name = "test.txt"; // Change file name as needed
    $file_data = file_get_contents($file_name);
    $file_data_array = explode('\n', $file_data);
    $i = 0;
    $new_file_data = "";
    foreach ($file_data_array as $piece)
    {
        $new_file_data .= $piece . ';';
        $i++;
        if ($i % 5 == 0) // Change number of pieces you want on a line as needed
        {
            $new_file_data .= '\n';
        }
    }
    file_put_contents($file_name, $new_file_data);
?>

这应该可以做到:

$str = '2QA4ZRDUT
IDVLTLZSC
4GYC3HCMV
1W6409JD5
70P7U66TE
OG2JBBZF6
5391PHOVW
ZAJ3OZ4H2
GMOB9E9X7
Q8U4C8ZK1
0WDZLRWWJ
N487W3S24
PKXQFFEK3
NSMKC29IB
HOLI1T2ZB
DVPIVLLLS
FH7RSZWTM
9VSUWPZEX
NM6ZWV19I
NGN1TGF6G
JWVI7LSIZ
U99TMVXXK
KLBDMRPQV
MEFKLUO3L
LICFIK24W
ELGPLCK51
QQS4SOJV1
KJ2UVTU1B
FLQ6T7LG6
QJZLAPYN1';

$arr = explode(PHP_EOL, $str);
$c = 1;
$str3 = '';
foreach ($arr as $item) {
    $str3.= $item.';';
    if ($c % 5 == 0) {
        $str3.= PHP_EOL;
    }
    ++$c;
}
echo "<p>$str3</p>";
$str='2QA4ZRDUT
IDVLTLZSC
4GYC3HCMV
1W6409JD5
70P7U66TE
OG2JBBZF6
5391PHOVW
ZAJ3OZ4H2
GMOB9E9X7
Q8U4C8ZK1
0WDZLRWJ
N487W3S24
PKXQFFEK3
NSMKC29IB
HOLI1T2ZB
DVPIVLLS
FH7RSZWTM
9VSUWPZEX
NM6ZWV19I
NGN1TGF6G
JWVI7LSIZ
U99TMVXXK
KLBDMRPQV
Mefkloo3L
LICFIK24W
ELGPLCK51
QQS4SOJV1
KJ2UVTU1B
FLQ6T7LG6
QJZLAPYN1′;
$arr=explode(PHP_EOL,$str);
$c=1;
$str3='';
foreach($arr作为$item){
$str3.=$item;
如果($c%5==0){
$str3.=菲律宾比索;
}
++$c;
}
回声“$str3

”;
请注意,在浏览器中看不到换行符,但在“查看源代码”时,换行符会很明显


编辑:我在这里使用PHP\u EOL,而不是其他答案所建议的“\n”。这可以确保脚本在任何平台(Win、MacOS和*nix)上都能正常工作,只要PHP设置设置为true

提示:使用模数operator@user1418870:很高兴能帮上忙,现在你能接受这个答案吗?