美好的一天,
我想知道你是否可以帮助我?
我有“产品价格”和“加价”我想制定一个“总价”,但它给我的结果不正确。
示例:“总价”=“产品价格”*“标记
我有以下代码。
<?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 :(得分: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
),因此str_replace(" ", "", $product_price)
语句具有对它没有影响,因此你实际上只考虑了数千(即,在这种情况下"28 999"*1.15
产生28*1.15
)......