Home » Php » PHP sort 2d array alphabetically by nested value

PHP sort 2d array alphabetically by nested value

Posted by: admin July 12, 2020 Leave a comment

Questions:

I have a PHP array that looks like this:

Array{
    [0] {
        'id'       => '0',
        'title'    => 'foo',
        'address'  => '123 Somewhere',
    }
    [1] {
        'id'       => '1',
        'title'    => 'bar',
        'address'  => '123 Nowhere',
    }
    [2] {
        'id'       => '2',
        'title'    => 'barfoo',
        'address'  => '123 Elsewhere',
    }
    [3] {
        'id'       => '3',
        'title'    => 'foobar',
        'address'  => '123 Whereabouts',
    }
}

and I want to sort it by the ‘title’ key in the nested arrays, to look like this:

Array{
    [1] {
        'id'       => '1',
        'title'    => 'bar',
        'address'  => '123 Nowhere',
    }
    [2] {
        'id'       => '2',
        'title'    => 'barfoo',
        'address'  => '123 Elsewhere',
    }
    [0] {
        'id'       => '0',
        'title'    => 'foo',
        'address'  => '123 Somewhere',
    }
    [3] {
        'id'       => '3',
        'title'    => 'foobar',
        'address'  => '123 Whereabouts',
    }
}

The first level key values don’t matter since I’m keeping track of each nested array via the nested key ‘id’.

I’ve played with ksort() but with no success.

How to&Answers:

You should use usort() (i’m assuming PHP 5.3+ here):

usort($your_array, function ($elem1, $elem2) {
     return strcmp($elem1['title'], $elem2['title']);
});

Edit:
I hadn’t noticed you wanted to preserve index association, so you actually need to use uasort() instead, with the same parameters.

Edit2:
Here is the pre-PHP 5.3 version:

function compareElems($elem1, $elem2) {
    return strcmp($elem1['title'], $elem2['title']);
}

uasort($your_array, "compareElems");