Sorting Json data
Updated on 28 Dec 2018
Imagine you have some JSON data, a big list like the one shown below.
$tags = '{"tags":[
{"name":"tags_priref","label":"priref","count":1,"ticked":true},
{"name":"tags_dimension_free","label":"dimension.free","count":1,"ticked":true},
{"name":"tags_production_date_end","label":"production.date.end","count":1,"ticked":false},
{"name":"tags_production_date_notes","label":"production.date.notes","count":1,"ticked":true},
{"name":"tags_production_date_start","label":"production.date.start","count":1,"ticked":false},
{"name":"tags_object_number","label":"object_number","count":1,"ticked":true},
{"name":"tags_object_category","label":"object_category","count":2,"ticked":true},
{"name":"tags_part_of_title","label":"part_of.title","count":1,"ticked":false},
{"name":"tags_record_access_owner","label":"record_access.owner","count":1,"ticked":false},
{"name":"tags_rights_notes_extra","label":"rights.notes.extra","count":4,"ticked":false},
{"name":"tags_rights_notes","label":"rights.notes","count":4,"ticked":false},
{"name":"tags_archive_notes","label":"archive_notes","count":5,"ticked":false},
{"name":"tags_archive_status","label":"archive_status","count":1,"ticked":false},
{"name":"tags_part_of_description_level","label":"part_of.description_level","count":1,"ticked":false},
{"name":"tags_part_of_reference","label":"part_of_reference","count":1,"ticked":false},
{"name":"tags_call_number","label":"call_number","count":1,"ticked":true},
{"name":"tags_dimension_free_dimension","label":"dimension.free.dimension","count":1,"ticked":true},
{"name":"tags_title","label":"title","count":1,"ticked":true},
{"name":"tags_input_date","label":"input.date","count":1,"ticked":false},
{"name":"tags_encoding_level","label":"encoding_level","count":1,"ticked":false},
{"name":"tags_description_level","label":"description_level","count":1,"ticked":true},
{"name":"tags_content_person_name_type","label":"content.person.name.type","count":1,"ticked":false},
{"name":"tags_content_person_name","label":"content.person.name","count":1,"ticked":false},
{"name":"tags_archive_notes_type","label":"archive_notes.type","count":5,"ticked":false},
{"name":"tags_input_name","label":"input.name","count":1,"ticked":false},
{"name":"tags_physical_access_conditions","label":"physical_access_conditions","count":1,"ticked":false},
{"name":"tags_record_type","label":"record_type","count":1,"ticked":false},
{"name":"tags_input_time","label":"input.time","count":1,"ticked":false}
],
"definedFormat":"brentP4"
}';
How do we sort the tags on the label so that they are alphabetical?
usort
The first step is to convert the json string into an object, and then use usort to sort the array.
$json_object = json_decode($tags);
usort($json_object->tags, function($a, $b) {
return $a->name > $b->name ? 1 : -1;
});
print_r($json_object);