2011-07-25 62 views
0

我有這樣的代碼:尋找最低的JSON值,從多個值的JSON響應

foreach($specs as $spec) { 
    if(preg_match('/^(\w+):\s*(.*?)\s\$?(\d*\.?\d*)$/', $spec, $matches)) { 
     list(,$tag,$name,$price) = $matches; 

     $url = 'https://www.googleapis.com/shopping/search/v1/public/products?country=AU&key=KEY&q=' . urlencode($name); 

     $obj = json_decode(file_get_contents($url)); 
     echo "<a href=\"{$obj->items[0]->product->link}\">{$name}</a> \${$obj->items[0]->product->inventories[0]->price}<br/>"; 
    } 
} 

這裏的JSON響應(例如): http://pastebin.com/VzAG1159


正如你可以看到有多個JSON響應中的價格值。我如何鍛鍊(使用PHP),最低價格?
因此,如果值是像這樣:

  • 294.00
  • 295.00
  • 296.00

它會選擇一個294.00。不幸的是谷歌不排序,他們對任何邏輯形式迴應,所以最便宜的可以通過或在年底一半。

我不知道什麼功能,我會用,即便算上有()似乎不工作。

乾杯。

回答

1

也許嘗試PHP的sorting functions之一?

如果你只需要通過所有的價格,價格你可以循環進行排序並把它們放在你然後進行排序使用asort()臨時數組。

0

這將整理$obj->items從最低到最高價:

$obj = json_decode(file_get_contents($url)); 

usort($obj->items, function ($a, $b) { 
    return $a->product->inventories[0]->price - $b->product->inventories[0]->price; 
}); 

echo "<a href=\"{$obj->items[0]->product->link}\">{$name}</a> \${$obj->items[0]->product->inventories[0]->price}<br/>"; 

輸出:

<a href="http://www.budgetpc.com.au/computer-hardware/desktop-cpus/bx80613i7970.html"></a> $578.13<br/> 

與JSON數據:http://pastebin.com/VzAG1159

+0

謝謝,但是,這並不在所有的排序呢。 http://pastebin.com/0dsFP1N1 - 使用此代碼:http://pastebin.com/dG5runQT只需要輸出的最低價格,而不是一個完整的清單。腳本通過某個部分,找到價格,然後向用戶迴響價格。這個價格應該是最低的。 – Dean

+0

@Dean你的實現是錯誤的,看到哪裏放排序代碼更新的代碼。 – Yoshi

+0

恩,謝謝。不太明白它,可能需要再讀一遍usort手冊。感謝您的實施,雖然:) – Dean