2017-03-14 53 views
0

美好的一天,PHP货币与XML - 错误结果

我想知道你是否可以帮助我?

我有一个“产品价格”和“标记”,我想制定一个“总价”,但它给了我不正确的结果。

例: “总价”= “产品价格” *“标记

我有以下代码

<?php 
$markup  = 1 + (15/100); 
$url   = "http://nanobug.co.za/feed/stock-file/Stock-File-New.xml"; 
$xml   = simplexml_load_file($url); 
foreach ($xml->product as $item) 
{ 
    $product_code = $item->code; 
    $product_price = $item->price; 
    $product_price = str_replace("R", "", $product_price); 
    $product_price = str_replace(" ", "", $product_price); 
    $total_price = $product_price * $markup; 
    echo "Product Price: ".$product_price."<br>"; 
    echo "Markup: ".$markup."<br>"; 
    echo "Equation: Total Price = Product Price * Markup<br>"; 
    echo "Total Price: ".$total_price."<br><br>"; 
} 
?> 

看到的结果的链接:View Results

的链接以查看xml文件:View XML

请问你能帮我一下,因为它给出了错误的总价格

+0

有效地考虑到它可能是因为你改变'$ product_price'的值为一个字符串。 – Toxide82

+0

@ÁlvaroGonzález我认为OP已经修复了在线脚本,所以现在编辑的问题其实包含正确的结果... – ewcz

+0

@ewcz Dammit ... –

回答

2

我会建议use

$product_price = preg_replace('~[ \x{00a0}]~siu', '', $product_price); 

,而不是

$product_price = str_replace(" ", "", $product_price); 

这样做的原因是,您的XML文件看起来像:

grep price *.xml | head -n1 | hexdump -C 

00000000 20 20 20 20 3c 70 72 69 63 65 3e 52 20 32 38 c2 | <price>R 28.| 
00000010 a0 39 39 39 2e 30 30 3c 2f 70 72 69 63 65 3e 0d |.999.00</price>.| 
00000020 0a            |.| 
00000021 

即空间作为千位的分隔符不是一个普通的空格,而是一个non-breaking space(如上所示UTF-8中的C2 A0),t因为str_replace(" ", "", $product_price)这个陈述对它没有影响,所以你只有在数千(即在这种情况下,"28 999"*1.15产生28*1.15)......

+0

美好的一天,感谢您的快速回复。我已经改变它,它仍然给我相同的结果 –

+0

@AndreHoffmann它呢?我只是试图执行脚本,它似乎工作...你可以尝试更新正则表达式? – ewcz

+0

非常感谢。我知道它与第二个合作。你的男人。希望你有一个美好的一天。 Tanx一百万 –