2016-07-06 1 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?

Я взглянул на ответ here, который рассказывает о array_multisort().

но я не уверен, достигает ли он того, что я ищу.

Любые мысли или идеи приветствуются.

+0

http://stackoverflow.com/questions/1597736/how-to-sort-an-array-o ф-ассоциативные-массивов по значению-в-а-дается ключ-в-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")); 

Примечание: "ЧМК" функция вызываемая (его должен использоваться для PHP> 5.3)

+0

Это работает для сортировки предметов от низкой цены до высокой, что является фантастическим. Как сортировать с высокой до низкой? Я попытался изменить < to > и переключить? -1: 1; но это не сработало. Редактировать: nevermind, узнал, как это сделать. Согласует ответ через несколько минут. Спасибо! –

+0

@ m.chiang Если я не ошибаюсь, вы уже изменили два предложения здесь: $ a <$ b' и '-1: 1', затем логически возвращаются те же самые вещи :) Обычно для сортировки с высокой на низком уровне вам нужно просто изменить «<' into '>» в предложении IF. Удачи :) p/s: Я хорошо получил ваш голос. благодаря –

0

Возможно, вам нужно использовать параметр $ assoc при декодировании этого json. Он предоставит вам данные в виде массива вместо объекта, чтобы вы могли сортировать этот массив. json_decode

$array1 = json_decode($input, TRUE); 

Я думаю, что это может быть также полезно, если вы читали о Object Iteration в PHP.

+0

Данные уже отправлены через json_decode. И он возвращается как массив, содержащий объекты. Итак, вы предлагаете преобразовать его в массив, содержащий массивы? –

+0

@ m.chiang да, если это будут все массивы вместо объектов, я думаю, что вы можете array_multisort() это проще – MaHDyfo

Смежные вопросы