Php 即使条件为真,foreach inside IF条件也不会输出

Php 即使条件为真,foreach inside IF条件也不会输出,php,xml,if-statement,foreach,conditional-statements,Php,Xml,If Statement,Foreach,Conditional Statements,我已经看了太长时间了,无法理解为什么它不起作用。正如示例文件的注释(下面的链接)中所述,我可以为IF条件中使用的变量输出正确的值。但只要我将foreach包装在条件中,后跟ELSE,就会忽略该条件并输出ELSE语句 我已经用数字替换两个IF变量中的一个/两个进行了测试。在这种情况下,它工作正常。但当它是两个变量时,它不会。我感到困惑,并确信这是一种完全基本的、可能的语法,我对此视而不见,因为我已经试过很多次了。。。我希望如此 PHP: $xml=simplexml\u load\u文件('fil

我已经看了太长时间了,无法理解为什么它不起作用。正如示例文件的注释(下面的链接)中所述,我可以为IF条件中使用的变量输出正确的值。但只要我将foreach包装在条件中,后跟ELSE,就会忽略该条件并输出ELSE语句

我已经用数字替换两个IF变量中的一个/两个进行了测试。在这种情况下,它工作正常。但当它是两个变量时,它不会。我感到困惑,并确信这是一种完全基本的、可能的语法,我对此视而不见,因为我已经试过很多次了。。。我希望如此

PHP:

$xml=simplexml\u load\u文件('file.xml');
$expenseCount=$xml->EXP->count();
$grandTotal=$xml->grandTotal;
$annualMax=$xml->annualMax;
//xPath是正确的。下面的测试输出正确的数字。
//回声“总计:.$grandTotal.”
年最大值:.$annualMax.”; //下面的if条件似乎被忽略了,我不知道为什么!! //即使$grandTotal大于$annualMax,else语句 如果($grandTotal>$annualMax){ foreach($xml->EXP as$expenses){ 回声“; echo“$expenseCount.”中的“$i.”号报销券; 回声“ 服务 小贩 服务日期 理由 总成本 已付金额 尚欠余额 "; 回声“; echo“$expenses->SERVICE.”; echo“$expenses->VENDOR.”; $serviceDate=date('md,Y',strottime($expenses->date)); 回显“$serviceDate.”; 回显“$expenses->REASON.”; echo“$”$费用->成本。”; echo“$”$费用->已付。”; echo“$”$费用->余额。“; 回声“ "; 回声“; $i++; } }否则{ 回声“; echo“您当前的总金额为$”$grandTotal.”。您没有超过年度最低自付费用$”$annualMax.“; 回声“; }
XML:


727.94
714
2018年1月12日星期五00:00:00 GMT-0500(美国东部时间)
修理
ABC车身
失准
130
110
20
2018年1月23日星期二00:00:00 GMT-0500(美国东部时间)
修理
XYZ加油站
旅行煤气
212
192
20
2018年1月23日星期二00:00:00 GMT-0500(美国东部时间)
散热器冲洗
快速冲洗
散热器年度保养
101.12
91.12
10
2018年1月26日星期五00:00:00 GMT-0500(美国东部时间)
换油
ABC车身
3000英里换油
125
105
20

粘贴箱将运行一周。

尝试将变量强制转换为浮点数。目前,它们是SimpleXML对象,可能会弄乱您的比较:

$grandTotal=(float)$xml->grandTotal;

$annualMax=(浮动)$xml->annualMax

不要使用粘贴箱。在你的问题中包含相关的材料,这样对将来寻找类似答案的人来说仍然有意义。我使用了pastebins,因为它们有一个原始视图,可以容纳php打开/关闭标记,并且易于复制/粘贴。还要注意的是,我确实在问题的主体中包含了相关的材料……不是直接相关的,但这不是产生词汇XML输出的方法。您没有试图转义数据中出现的特殊字符,因此一旦您的数据包含
&
@MichaelKay,您就会生成无效的XML。虽然我理解这种担心,但这并不是真正的生成XML输出。它是关于在PHP中使用XML数据源的。这就是说,XML输出是由GoogleApps脚本生成的,该脚本将GoogleSheet的行和列转换为有效的XML。刚刚测试了您的关注点,它正确地编码了节点内容中的html实体。非常感谢。非常感谢。
$xml = simplexml_load_file('file.xml');

$expenseCount = $xml->EXP->count();
$grandTotal = $xml->GRANDTOTAL;
$annualMax = $xml->ANNUALMAX;

// xPath is correct. The below test outputs the correct numbers.
// echo "<h1>GRAND TOTAL: ".$grandTotal."</h1><br/><h1>ANNUAL MAX: ".$annualMax."</h1>";

// The below if condition seems to be ignored and I can't figure out why!!
// Even though $grandTotal IS GREATER THAN $annualMax, the else statement
if ($grandTotal > $annualMax) {

foreach($xml->EXP as $expenses) {

echo "<div class=\"coupon ".$i."\">";
echo "<h1>Reimbursement</h1><h2>Coupon No. ".$i." of ".$expenseCount."</h2>";

echo "<table>
<tbody>
<tr class=\"headings\">
<th>Service</th>
<th>Vendor</th>
<th>Date of Service</th>
<th>Reason</th>
<th>Total Cost</th>
<th>Amount Paid</th>
<th>Balance Due</th>
</tr>";
echo "<tr class=\"expense-details\">";
echo "<td>".$expenses->SERVICE."</td>";
echo "<td>".$expenses->VENDOR."</td>";
$serviceDate = date('M d, Y', strtotime($expenses->DATE));
echo "<td>".$serviceDate."</td>";
echo "<td>".$expenses->REASON."</td>";
echo "<td>$".$expenses->COST."</td>";
echo "<td>$".$expenses->PAID."</td>";
echo "<td>$".$expenses->BALANCE."</td>";
echo "</tr>
</tbody>
</table>";

echo "</div>";

$i++;
}
} else {
echo "<div class=\"not-yet\">";
echo "<h1>Your current total is $".$grandTotal.". You have not exceeded the annual minimum out-of-pocket expenses of $".$annualMax.".</h1>";
echo "</div>";
}
<EXPREP>
<GRANDTOTAL>727.94</GRANDTOTAL>
<ANNUALMAX>714</ANNUALMAX>
<EXP>
<DATE>Fri Jan 12 2018 00:00:00 GMT-0500 (EST)</DATE>
<SERVICE>Repair</SERVICE>
<VENDOR>ABC Auto Body</VENDOR>
<REASON>Out of Alignment</REASON>
<COST>130</COST>
<PAID>110</PAID>
<BALANCE>20</BALANCE>
</EXP>
<EXP>
<DATE>Tue Jan 23 2018 00:00:00 GMT-0500 (EST)</DATE>
<SERVICE>Repair</SERVICE>
<VENDOR>XYZ Gas Station</VENDOR>
<REASON>Travel Gas</REASON>
<COST>212</COST>
<PAID>192</PAID>
<BALANCE>20</BALANCE>
</EXP>
<EXP>
<DATE>Tue Jan 23 2018 00:00:00 GMT-0500 (EST)</DATE>
<SERVICE>Radiator Flush</SERVICE>
<VENDOR>Quick Flush</VENDOR>
<REASON>Annual Radiator Maintenance</REASON>
<COST>101.12</COST>
<PAID>91.12</PAID>
<BALANCE>10</BALANCE>
</EXP>
<EXP>
<DATE>Fri Jan 26 2018 00:00:00 GMT-0500 (EST)</DATE>
<SERVICE>Oil Change</SERVICE>
<VENDOR>ABC Auto Body</VENDOR>
<REASON>3000 Mile Oil Change</REASON>
<COST>125</COST>
<PAID>105</PAID>
<BALANCE>20</BALANCE>
</EXP>
</EXPREP>