2016-07-06 208 views
0

鑑於對象的數組,數組中的每個對象看起來是這樣的:如何基於對象鍵值對PHP數組中的對象進行排序?

"success": true, 
    "data": [ 
    { 
     "doctor_id": 4, -- Use this id for getting in method get inquiry doctor offers. 
     "clinic": "John", 
     "distance": "10 mile" 
     "city": "Los Angeles", 
     "price": "123", 
     "photo": false, 
     "rating": { 
     "stars": null, 
     "reviews": null 
     }, 
     "add_info"=> "Some information", 
     "time_after_create": 942 -- in seconds. 
    } 
    ] 

是存在於PHP的任何方法,讓我的$數據 - >價格從低到高,由高到低進行排序,然後按$data->rating->stars排序,其中星星是0到5之間的數字?

我看了一下關於array_multisort()的回答here

但我不確定它是否達到我正在尋找的。

歡迎任何想法或見解。

+0

http://stackoverflow.com/questions/1597736/how-to-sort-an-array-o F-關聯陣列按值對的一給出的密鑰功能於PHP?我最喜歡的是第二個答案 –

回答

1

使用usort,這裏有一個例子:

function cmp($a, $b) 
{ 
    return strcmp($a->name, $b->name); 
} 

usort($your_data, "cmp"); 

在你的情況,我可以迅速提出解決方案如下:

function cmp($a, $b) 
{ 
    if ($a->price == $b->price) { 
     return 0; 
    } 
    return ($a->price < $b->price) ? -1 : 1; 
} 
usort($your_data, array($this, "cmp")); 

注: 「CMP」 是函數調用(它必須用於PHP> 5.3)

+0

這適用於從價格低到高的項目排序,這是太棒了。我如何從高到低排序?我試過改變< to >並切換? -1:1;但它不起作用。 編輯:沒關係,找出如何做到這一點。將在幾分鐘內批准答案。謝謝! –

+0

@ m.chiang如果我沒有錯,你已經在這裏修改了兩個子句'$ a <$ b'和'-1:1',然後在邏輯上它回來了相同的東西:)通常從高到低,你只需要改變IF子句中的'<' into '>'。祝你好運:) p/s:我收到你的投票。謝謝 –

0

也許你應該在解碼這個json時使用$ assoc參數。它將爲您提供數據而不是對象,因此您可以對該數組進行排序。 json_decode

$array1 = json_decode($input, TRUE); 

我認爲它可以,如果你在閱讀關於PHP也Object Iteration很有幫助。

+0

數據已經通過json_decode。它返回爲包含對象的數組。所以你建議將它轉換爲包含數組的數組? –

+0

@ m.chiang是的,如果它將所有的數組而不是對象,我認爲你可以array_multisort()更容易 – MaHDyfo

相關問題