Reputation: 191
I have the following json:
{
"ID":"4",
"name":"Gil",
"likes":0,
"Dec":"A Man"
},
{
"ID":"3",
"name":"Yoni",
"likes":3,
"Dec":"A child"
},
{
"ID":"6",
"name":"Roni",
"likes":1,
"Dec":"A woman"
}
And I would like to rearange it based on the likes from heighst to lowest so the result will be :
{
"ID":"5",
"name":"Roni",
"likes":6,
"Dec":"A woman"
} ,
{
"ID":"3",
"name":"Yoni",
"likes":3,
"Dec":"A child"
},
{
"ID":"4",
"name":"Gil",
"likes":0,
"Dec":"A Man"
}
How can I rearange it in php ?
Upvotes: 0
Views: 692
Reputation: 20469
json_decode
/ json_encode
and usort
:
$array = json_decode($json_string, TRUE);
usort($array, function($a, $b) {
return $a['likes'] - $b['likes'];
});
echo json_encode($array, JSON_PRETTY_PRINT);
Upvotes: 5
Reputation: 64657
$json = '[{
"ID":"4",
"name":"Gil",
"likes":0,
"Dec":"A Man"
},
{
"ID":"3",
"name":"Yoni",
"likes":3,
"Dec":"A child"
},
{
"ID":"6",
"name":"Roni",
"likes":1,
"Dec":"A woman"
}]';
$json_arr = json_decode($json, true);
usort(
$json_arr,
function($a, $b) {
if ($a['likes'] == $b['likes']) {
return 0;
}
return ($a['likes'] > $b['likes']) ? -1 : 1;
});
$json = json_encode($json_arr);
Upvotes: 1