Сортировка JSON в PHP

117
10 апреля 2019, 07:00

Есть Json, нужно отсортировать по num.

$str = '{
    "cb":[
        {
            "name":"cb",
            "num":0
        },
        {
            "name":"cb2",
            "num":7
        },
        {
            "name":"cbRed",
            "num":3
        }
    ]
} ';
$data = json_decode($str, true);
usort($data, function($a, $b) { 
    return $a->cb->num < $b->cb->num ? -1 : 1;
});                                                                                                                                                                                                        
print_r($data);   
Answer 1

в своем коде вы делаете несколько ошибок. Во-первых, вам надо отсортировать $data['cb'], а вы сортируете сам массив $data.
Во-вторых, вы десериализуете json в массив, а в сортировке обращатесь к нему как к объекту, а не массиву.

Так что ваш код следует исправить следующим образом

usort($data['cb'], function($a, $b) {.
    return $a['num'] - $b['num'];
});.

что касается возврата значения из функции-компаратора, то не обязательно возвращать -1/1. достаточно вернуть отрицательно/положительное значение. Так что проще всего вернуть разность значений. В пхп7 также был введен оператор <=>

READ ALSO
Создание уникальных id

Создание уникальных id

В коде, в цикле я задаю уникальные idНо они начинаются повторяться в БД, из-за неверных функций

121
Как отлавливать warning в PHP?

Как отлавливать warning в PHP?

Есть код, который отрабатывает ответы на запросы к API и там есть такой участок:

132
Ошибка в админке wordpress &#171;failed to open stream: No such file or directory&#187; — как исправить?

Ошибка в админке wordpress «failed to open stream: No such file or directory» — как исправить?

Есть сайт на wordpress с установленным плагином WP Hide PostЕсть необходимость переноса сайта на новый хостинг, но решил перестраховаться и проверить...

118