PHP使用MYSQL问题中的动态数据创建文本文件

PHP使用MYSQL问题中的动态数据创建文本文件,php,text,Php,Text,我正在用php编写一个文本文件,使用mysql db字段,这些字段本质上是动态的。我无法保持列宽不变,请参阅下面的数据和列,以便更好地理解我的意思 文本文件输出: 450 65445 90900 87954 112 90900 45875 24565 15484 KA01 23232 上面的php脚本: $myFile = "testFile.txt"; $fh = fopen($myFile, '

我正在用php编写一个文本文件,使用mysql db字段,这些字段本质上是动态的。我无法保持列宽不变,请参阅下面的数据和列,以便更好地理解我的意思

文本文件输出:

                450 65445 90900 87954          112
              90900 45875 24565 15484          KA01 23232
上面的php脚本:

$myFile = "testFile.txt";
$fh = fopen($myFile, 'w') or die("can't open file");

if ($quer2[DCNO1]>0){fwrite($fh, str_pad($quer2[DCNO1],19, " ", STR_PAD_LEFT));} if ($quer2[DCNO2]>0) {fwrite($fh, str_pad($quer2[DCNO2],6, " ", STR_PAD_LEFT));} if ($quer2[DCNO3]>0) {fwrite($fh, str_pad($quer2[DCNO3],6, " ", STR_PAD_LEFT));} if ($quer2[DCNO4]>0) {fwrite($fh, str_pad($quer2[DCNO4],6, " ", STR_PAD_LEFT));} 
fwrite($fh, str_pad($dchd2['PO_No'],13, " ", STR_PAD_LEFT));
$stringData = "\n";
fwrite($fh, $stringData);

if ($quer2[DCNO5]>0) {fwrite($fh, str_pad($quer2[DCNO5],19, " ", STR_PAD_LEFT));} if ($quer2[DCNO6]>0) {fwrite($fh, str_pad($quer2[DCNO6],6, " ", STR_PAD_LEFT));} if ($quer2[DCNO7]>0) {fwrite($fh, str_pad($quer2[DCNO7],6, " ", STR_PAD_LEFT));} if ($quer2[DCNO8]>0) {fwrite($fh, str_pad($quer2[DCNO8],6, " ", STR_PAD_LEFT));}
fwrite($fh, str_pad($dchd2['Vehicle_no'],20, " ", STR_PAD_LEFT));
$stringData = "\n";
fwrite($fh, $stringData);

fclose($fh);
现在,如果列中的一个值为0,那么由于if条件,空间会被删除,在这种情况下,我如何计算空间并给出额外的空间

在“我的if”条件下,如果其中一个值为0,则输出文本文件:

                450 90900           112
              90900 45875 24565 15484          KA01 23232

使用制表位\t。它确保不同行中的每个项目从同一列开始

这意味着当项的长度为2个字符且无法填充4个空格选项卡时,将添加2个空格

请记住:不同的编辑器对选项卡有不同的概念,有些编辑器通常插入空格而不是选项卡


编辑:实际上,更简单的解决方案是使用else子句并编写str_pad,20

使用制表位\t。它确保不同行中的每个项目从同一列开始

这意味着当项的长度为2个字符且无法填充4个空格选项卡时,将添加2个空格

请记住:不同的编辑器对选项卡有不同的概念,有些编辑器通常插入空格而不是选项卡


编辑:实际上,更简单的解决方案是使用else子句并编写str_pad,20

您的代码非常繁忙,请尝试通过一个可以在一个位置处理“0”的函数来集中代码。下面的代码还没有经过测试,但是应该会给你一个正确的想法

$myFile = "testFile.txt";
$fh = fopen($myFile, 'w') or die("can't open file");

function writepad($str,$pad)
{
    global $fh;
    if($str==0) $str=" "; //handle the case where str is 0, replace it with a space
    fwrite($fh,str_pad($str,$pad,STR_PAD_LEFT));
}
writepad($quer2[DCNO1],19);
writepad($quer2[DCNO2],6);
writepad($quer2[DCNO3],6);
writepad($quer2[DCNO4],6);
writepad($quer2['PO_No'],13); 

fwrite($fh, "\n");

writepad($quer2[DCNO5],19);
writepad($quer2[DCNO6],6);
writepad($quer2[DCNO7],6);
writepad($quer2[DCNO8],6);
writepad($quer2['Vehicle_no'],20); 

fwrite($fh, "\n");

fclose($fh);

您的代码非常繁忙,请尝试通过一个可以在一个位置处理“0”的函数来集中代码。下面的代码还没有经过测试,但是应该会给你一个正确的想法

$myFile = "testFile.txt";
$fh = fopen($myFile, 'w') or die("can't open file");

function writepad($str,$pad)
{
    global $fh;
    if($str==0) $str=" "; //handle the case where str is 0, replace it with a space
    fwrite($fh,str_pad($str,$pad,STR_PAD_LEFT));
}
writepad($quer2[DCNO1],19);
writepad($quer2[DCNO2],6);
writepad($quer2[DCNO3],6);
writepad($quer2[DCNO4],6);
writepad($quer2['PO_No'],13); 

fwrite($fh, "\n");

writepad($quer2[DCNO5],19);
writepad($quer2[DCNO6],6);
writepad($quer2[DCNO7],6);
writepad($quer2[DCNO8],6);
writepad($quer2['Vehicle_no'],20); 

fwrite($fh, "\n");

fclose($fh);

好吧,你仍然有同样的问题,只是8的倍数。是的,你是对的,他只是没有在每个代码执行路径中一致地使用它,因此问题就出现了。@LukaRamishvili,else选项是一个更好的选项。它很好用。非常感谢。@user1114409如果您只是想将每一行除以,比如说,2个空行,那么不要以已经打印的行数为基础,而是在每一行结束时\n \n进行回显。例如`第1行项目1项目2项目3\n\n第2行项目1项目2\n\n第3行。。等等。好吧,你仍然有同样的问题,只是8的倍数。是的,你是对的,他只是没有在每个代码执行路径中一致地使用它,因此问题就出现了。@LukaRamishvili,else选项是一个更好的选项。它很好用。非常感谢。@user1114409如果您只是想将每一行除以,比如说,2个空行,那么不要以已经打印的行数为基础,而是在每一行结束时\n \n进行回显。例如`第1行项目1项目2项目3\n\n第2行项目1项目2\n\n第3行。。等等[试试这个][1]str_pad,20;也可以很好地工作,但也可以尝试链接[1]:[试试这个][1]stru_pad,20;也可以正常工作,但请尝试链接[1]: