3

I have an array that needs to be sorted by the third level.

I need to order the array by the fullname value. Is this possible?

$array = array(
    'family1' => array(
        'family_data' => array(
            'fullname' => 'Samuel Smith',
            '...' => '...'
        )
    ),
    'family2' => array(
        'family_data' => array(
            'fullname' => 'John Doe',
            '...' => '...'
        )
    ),
    'family3' => array(
        'family_data' => array(
            'fullname' => 'Adrian Chan',
            '...' => '...'
        )
    )
);

Easier reading:

Array
(
    [family1] => Array
        (
            [family_data] => Array
                (
                    [fullname] => Samuel Smith
                    [...] => ...
                )

        )

    [family2] => Array
        (
            [family_data] => Array
                (
                    [fullname] => John Doe
                    [...] => ...
                )

        )

    [family3] => Array
        (
            [family_data] => Array
                (
                    [fullname] => Adrian Chan
                    [...] => ...
                )

        )

)

The desired result would be:

Array
(
    [family3] => Array
        (
            [family_data] => Array
                (
                    [fullname] => Adrian Chan
                    [...] => ...
                )

        )

    [family2] => Array
        (
            [family_data] => Array
                (
                    [fullname] => John Doe
                    [...] => ...
                )

        )

    [family1] => Array
        (
            [family_data] => Array
                (
                    [fullname] => Samuel Smith
                    [...] => ...
                )

        )

)
3
  • (The code before your recent edit would have been better, as we can copy-paste it into our editor to test. (Which I did.)) Commented May 16, 2013 at 8:17
  • stackoverflow.com/questions/15062210/how-do-i-sort-the-follwing-array Commented May 16, 2013 at 8:18
  • @Dogbert Thanks, I'll remember that for next time Commented May 16, 2013 at 8:19

4 Answers 4

4

Use uasort

uasort — Sort an array with a user-defined comparison function and maintain index association

uasort($array, function($a, $b) {
    return strcmp($a['family_data']['fullname'], $b['family_data']['fullname']);
});

Test:

$array = array(
    'family1' => array(
        'family_data' => array(
            'fullname' => 'Ben Smith',
            '...' => '...',
            '...' => '...'
        ),
        '...' => '...',
        '...' => '...'
    ),
    'family2' => array(
        'family_data' => array(
            'fullname' => 'John Doe',
            '...' => '...',
            '...' => '...'
        ),
        '...' => '...',
        '...' => '...'
    ),
    'family3' => array(
        'family_data' => array(
            'fullname' => 'Aen Smith',
            '...' => '...',
            '...' => '...'
        ),
        '...' => '...',
        '...' => '...'
    ),
);

uasort($array, function($a, $b) {
    return strcmp($a['family_data']['fullname'], $b['family_data']['fullname']);
});

print_r($array);

Output:

Array
(
    [family3] => Array
        (
            [family_data] => Array
                (
                    [fullname] => Aen Smith
                    [...] => ...
                )

            [...] => ...
        )

    [family1] => Array
        (
            [family_data] => Array
                (
                    [fullname] => Ben Smith
                    [...] => ...
                )

            [...] => ...
        )

    [family2] => Array
        (
            [family_data] => Array
                (
                    [fullname] => John Doe
                    [...] => ...
                )

            [...] => ...
        )

)
Sign up to request clarification or add additional context in comments.

1 Comment

How would you changethe ordering, sorting by ASC or DESC?
1

Try this :

$sort = array();
foreach($your_array as $k=>$v) {
    $sort['fullname'][$k] = $v['family_data']['fullname'];
}

array_multisort($sort['fullname'], SORT_ASC, $your_array);


echo "<pre>";
print_r($your_array);

Comments

0

http://www.php.net/manual/en/function.array-multisort.php Take a look at example 3, I think that would help you out.

Comments

0

Sort array of objects by object fields You can do that using the PHP usort function http://php.net/manual/en/function.usort.php

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.