2017-02-17 8 views
1

Я хочу отсортировать этот массив JSON по наивысшему значению в unddalue imdb.Сортировка JSON по максимальному значению PHP

[{ 
    "name": "Space home", 
    "year": 2012, 
    "plot": "Ghost dies in fire", 
    "run": 103, 
    "run_category": "1", 
    "rated": "PG-13", 
    "imdb": 83, 
    "meta": 82, 
    "genre": "001 002 003", 
    "tags": "test", 
    "source": "movie123", 
    "id": 6483953 
}, { 
    "name": "Epaaoon", 
    "year": 2016, 
    "plot": "Space dies in fire", 
    "run": 153, 
    "run_category": "2", 
    "rated": "R", 
    "imdb": 64, 
    "meta": 54, 
    "genre": "001 006 007", 
    "tags": "test2", 
    "source": "movie423", 
    "id": 7352753 
}] 

Я попытался:

usort($data, function($a, $b) { function 
return $a->imdb > $b->imdb ? -1 : 1; }); 

, который я нашел здесь, но я не могу заставить его работать, и я понятия не имею, почему. Любая помощь очень ценится.

EDIT:

<?php $url = $_SERVER['DOCUMENT_ROOT'] . '/../data.json'; 
$data = json_decode(file_get_contents($url), true); 
usort($data, function($a, $b) { //Sort the array using a user defined function 

return $a->meta > $b->meta ? -1 : 1; //Compare the scores 
}); 
print_r($data); 
?> 
+0

Я думаю, что у вас больше кода, который нам не хватает. можете ли вы опубликовать более полный пример, пожалуйста. – Augwa

+0

Извините! Обновлен с полным кодом php. –

+0

Поскольку вы используете 'true' в качестве второго аргумента,' 'json_decode()', элементы являются массивами, а не объектами. Так что это '$ a ['meta']', а не '$ a-> meta'. – Barmar

ответ

1

Либо избавиться от true аргумента json_decode(), или использовать $a['meta'] и $b['meta'] в функции сравнения. Второй аргумент json_decode() сообщает, что он преобразует объекты JSON в ассоциативные массивы PHP, а не объекты.