“如果”不起作用 - 奇怪的字符串格式化

时间:2016-06-07 12:38:22

标签: php xml formatting

我对数据处理有一些奇怪的问题。我需要从用户表单中选择数据并处理它(生成xml)。 例如,数据如下:

2000; AC; 1; 60; 5; 5;您的设置 - 意味着电压,电压类型,测试电流,测试时间,加速时间,减速时间和用户提示。

我想根据最后一个值来决定如何组装我的xml文件。如果它为零,则会有更短的xml程序集,而当有文本时,会有用户提示组装xml标记。

所以我将输入分解为数组,并通过以下方式检查值:

If (empty($xplodline[6]) == true) {do this;}
else {do that;}

问题是,即使$ xplodline [6]中有0符合预期,它始终只执行“那个”,而不是“this”。

所以我把echo $ xplodline [6];进入{做那个;}看看发生了什么。 回零,(当这个动作在循环中时,我从循环中得到其他$ xplodline [6]),我看到$ xplodline [6]和下一个$ xplodline中的零之间有一个空格。 [6]迭代。当我查看具有这些值的用户表单或临时清理文件时,它们之间没有空格。它可能来自哪里?

当我将另一个数组分隔符放入用户表单中时,将其生成; 0;没有空间,If语句运作良好。

以下是临时清理文件的原始数据:

2000;AC;1;60;5;5;0
2000;AC;1;60;5;5;Set your cables for X10
2000;AC;1;60;5;5;Set your cables for X10 

有什么想法吗?

好的,这是代码:

$stringer = fopen($tempfile, "r");
while(!feof($stringer)){
$oneline = fgets($stringer) ;
$xplodline = explode(";",$oneline) ;
$range01 = "gross" ;
$rampup = "100" ;
$rampdown = "100" ;
$rampupfunction = "false" ;
$rampdownfunction = "false" ;
$currentrange = "_1mA" ;
$assy01 = "1" ;
if ($xplodline[0] >= 3000) {$range01 = "gross" ;}
else {$range01 = "klein" ;}
if (empty($xplodline[4]) == false) {$rampupfunction = "true" ; $rampup = round($xplodline[0] / $xplodline[4]) ;}
if (empty($xplodline[5]) == false) {$rampdownfunction = "true" ;$rampdown = round($xplodline[0] / $xplodline[5]) ;}
if ($xplodline[2] < 1) {$currentrange = "_1mA";}
if ($xplodline[2] >= 1 && $xplodline[2] < 10) {$currentrange = "_10mA";}
if ($xplodline[2] >= 10 && $xplodline[2] < 100) {$currentrange = "_100mA";}
if (empty($xplodline[6]) == true) {$assy01 = $xmltestbegin.$xplodline[0]."V ".$xplodline[1].$xmltype.$xplodline[1].$xmlrange.$range01.$xmlrampup.$rampupfunction.$xmlrampdown.$rampdownfunction.$xmlcurrentrange.$currentrange.$xmlvoltage.$xplodline[0].$xmlrampupspeed.$rampup.$xmlrampdownspeed.$rampdown.$xmltesttime.$xplodline[3].$xmlcurrent.$xplodline[2].$xmlballast ;}
else {$assy01 = $xmlpromptbegin.$xplodline[6].$xmlpromptend.$xmltestbegin.$xplodline[0]."V ".$xplodline[1].$xmltype.$xplodline[1].$xmlrange.$range01.$xmlrampup.$rampupfunction.$xmlrampdown.$rampdownfunction.$xmlcurrentrange.$currentrange.$xmlvoltage.$xplodline[0].$xmlrampupspeed.$rampup.$xmlrampdownspeed.$rampdown.$xmltesttime.$xplodline[3].$xmlcurrent.$xplodline[2].$xmlballast ;}
file_put_contents ( $filename, $assy01, FILE_APPEND );  
}
fclose($stringer);

我的功能正常,每个除了最后一个,都有效......

1 个答案:

答案 0 :(得分:0)

来自http://php.net/manual/en/function.fgets.php

  

读取长度 - 读取1个字节,或换行(包含在返回值中)或EOF(以先到者为准)时结束。如果没有指定长度,它将继续从流中读取,直到它到达行尾。

简而言之,最后一个数组条目中总会有换行符。通过

来清理它
$oneline = rtrim(fgets($stringer));

你也可以考虑:

$stringer = fopen($tempfile, "r");
while(!feof($stringer)){
    $xplodline = fgetcsv($stringer,0,";"); 
    //Rest of code as normal

允许PHP将文件作为CSV样式文件处理。