2017-03-14 13 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

私はこの理由は、あなたのxmlファイルは次のように見えることであるuse

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

代わりの

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

に示唆している:

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*1.15をもたらす"28 999"*1.15)...

+0

おはよう、ありがとうございました。私はそれを変更して、それはまだ私に同じ結果を与えている –

+0

@AndreHoffmannそれはありますか?私はちょうどスクリプトを実行しようとしたと動作するようだ...あなたは更新された正規表現を試すことができますか? – ewcz

+0

ありがとうございました。私はそれが2番目と一緒に働いた。あなたの男。良い一日を。千万 –