Есть 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);
в своем коде вы делаете несколько ошибок. Во-первых, вам надо отсортировать $data['cb'], а вы сортируете сам массив $data.
Во-вторых, вы десериализуете json в массив, а в сортировке обращатесь к нему как к объекту, а не массиву.
Так что ваш код следует исправить следующим образом
usort($data['cb'], function($a, $b) {.
return $a['num'] - $b['num'];
});.
что касается возврата значения из функции-компаратора, то не обязательно возвращать -1/1. достаточно вернуть отрицательно/положительное значение. Так что проще всего вернуть разность значений. В пхп7 также был введен оператор <=>
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости