【发布时间】:2016-06-07 12:38:21
【问题描述】:
我在数据处理方面遇到了奇怪的问题。我需要从用户表单中挑选数据,并处理它(生成 xml)。 数据例如是这样的:
2000;AC;1;60;5;5;进行设置 - 表示电压、电压类型、测试电流、测试时间、加速时间、减速时间和用户提示。
我想根据最后一个值决定如何组装我的 xml 文件。如果为零,则会有较短的xml组装,而当有文本时,则会有xml标记的用户提示组装。
所以我将输入分解为数组,并通过以下方式检查值:
If (empty($xplodline[6]) == true) {do this;}
else {do that;}
问题是,它总是只做“那个”,而不是“这个”,即使 $xplodline[6] 中的值是 0 也是如此。
所以我把 echo $xplodline[6];进入 {do that;} 看看发生了什么。 回显零,(当这个动作在循环中时,我从循环中得到其他 $xplodline[6]s),我看到 $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);
我的函数工作正常,除了最后一个之外,每个 If 都可以工作......
【问题讨论】:
-
文本太多,代码太少......
-
@apokryfos
0为空。 php.net/manual/en/function.empty.phpThe following things are considered to be empty:..."0" (0 as a string). -
请提供一个可重现的例子。 eval.in/584631
-
@chris85 你是对的,尽管当涉及尾随空格时它仍然是一个悲伤的来源。
-
是的,var_dumping
$xplodline[6]可能很有用。
标签: php xml formatting