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);   

Output