我正在做的一个项目让我在我的智慧结束。我是用PHP编写的新手,我相信在我的问题中我会相当明显。我有一个XML文件,其中包含多个项目元素,我在表格中列出。在表格的最后,我有另一行显示总重量。如果所有权重都是整数,则可以正常工作。我遇到的问题是,如果我的项目权重中有任何小数,它们似乎在计算过程中消失了。以下是我正在运行的foreach语句的示例。
foreach ($xml->items->item as $item) {
$ItemWeight = (($item->weight) * ($item->quantity)) + $ItemWeight;
}
摘自XML文档。
<items>
<item>
<name>Sleeping Bag</name>
<weight>5</weight>
<quantity>1</quantity>
</item>
<item>
<name>Clothes</name>
<weight>2.5</weight>
<quantity>5</quantity>
</item>
<item>
<name>Socks</name>
<weight>.5</weight>
<quantity>10</quantity>
</item>
<item>
<name>MRE</name>
<weight>1</weight>
<quantity>5</quantity>
</item>
</item>
在我的示例Clothes
中,计算的总权重为10而不是12.5,Socks
将完全消失。 $ItemWeight
输出为20而不是27.5。
答案 0 :(得分:0)
您应该尝试通过检查单个节点的值来调试代码。您可以尝试以下获得正确值27.5的代码。
这里我已经将xml转换为一个不需要的数组。这只是一个快速而肮脏的解决方案。你可以看到foreach没有问题。我相信你传递的价值观是错误的。
$xmlstring = '
<items>
<item>
<name>Sleeping Bag</name>
<weight>5</weight>
<quantity>1</quantity>
</item>
<item>
<name>Clothes</name>
<weight>2.5</weight>
<quantity>5</quantity>
</item>
<item>
<name>Socks</name>
<weight>.5</weight>
<quantity>10</quantity>
</item>
<item>
<name>MRE</name>
<weight>1</weight>
<quantity>5</quantity>
</item>
</items>';
$xml = simplexml_load_string($xmlstring);
$json = json_encode($xml);
$items = json_decode($json,FALSE);
$ItemWeight=0;
foreach ($items->item as $item) {
$ItemWeight = (($item->weight) * ($item->quantity)) + $ItemWeight;
echo $ItemWeight."\n";
}
答案 1 :(得分:0)
尝试使用floatval()
所以你的foreach循环看起来像这样:
foreach ($xml->item as $item) {
$weight = floatval(($item->weight));
$quantity = floatval(($item->quantity));
$ItemWeight = ($weight * $quantity);
echo $ItemWeight."\n";