Reputation: 361
I am trying to sort the array using usort()
.But my function does not seem to work. I want to sort it by partners_order
of each object i.e, $myJson[0] and then $myJson1 separately
The Json array is decoded using $myJson = json_decode($jsonData);
PHP function to sort is written below.
usort($myJson, function($a, $b) {
return $a->partners->partners_order < $b->partners->partners_order ? -1 : 1;
});
Due to restrictions in this site, I cant post the array here. Hence I am forced to use 3rd party site fiddle
https://jsfiddle.net/z8s18c21/
any help please ?
Upvotes: 0
Views: 3935
Reputation: 1
You may be referencing your array incorrectly. Try this:
$myJson = json_decode($jsonData, true);
usort($myJson['partners'], function($a, $b) {
return $a['partners_order'] < $b['partners_order'] ? -1 : 1;
});
echo '<pre>';
print_r($myJson);
echo '</pre>';
Upvotes: 0
Reputation: 16688
I think it might work if you loop over your objects with foreach
.
$myJson = '[
{
"title":"1st Inning",
"inning_order":0,
"partners":[
{"partners_order":3,"partner_1":{"id":1927312,"runs":31},"partner_2":{"id":1462508,"runs":32}},
{"partners_order":1,"partner_1":{"id":1927311,"runs":11},"partner_2":{"id":1462508,"runs":12}},
{"partners_order":2,"partner_1":{"id":1927311,"runs":21},"partner_2":{"id":1462507,"runs":22}}
]
},
{
"title":"2nd Inning",
"inning_order":1,
"partners":[
{"partners_order":2,"partner_1":{"id":927312,"runs":21},"partner_2":{"id":462508,"runs":22}},
{"partners_order":1,"partner_1":{"id":927311,"runs":11},"partner_2":{"id":462508,"runs":21}},
{"partners_order":3,"partner_1":{"id":927311,"runs":31},"partner_2":{"id":462507,"runs":32}}
]
}
]';
$read_json = json_decode($myJson);
foreach ($read_json as $myJson1) {
usort($myJson1->partners,function($a, $b) {
return $a->partners_order <=> $b->partners_order;
});
}
echo '<pre>';
print_r($read_json);
echo '</pre>';
Code has now been tested, because you provided the data objects.
Upvotes: 2