2016-07-06 210 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

相关问题