5

This should be really simple, but what is the way to go on this. I want to sort an multidimensional array by a key, like this:

Array (
[0] => Array
    (
        [iid] => 1
        [invitee] => 174
        [nid] => 324343
        [showtime] => 2010-05-09 15:15:00
        [location] => 13
        [status] => 1
        [created] => 2010-05-09 15:05:00
        [updated] => 2010-05-09 16:24:00
    )

[1] => Array
    (
        [iid] => 1
        [invitee] => 220
        [nid] => 21232
        [showtime] => 2010-05-09 15:15:00
        [location] => 12
        [status] => 0
        [created] => 2010-05-10 18:11:00
        [updated] => 2010-05-10 18:11:00
    ))

Say i want to sort this by [status], how would I achieve this? Thanks in advance!

1

5 Answers 5

7
//define a comparison function
function cmp($a, $b) {
    if ($a['status'] == $b['status']) {
        return 0;
    }
    return ($a['status'] < $b['status']) ? -1 : 1;
}

usort($array, "cmp");

That should do what you want, you can alter the comparison function to sort on whatever key you want.

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

Comments

2

Try this : Using array_multisort

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

array_multisort($sort['status'], SORT_DESC, $your_array);


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

Ref: http://php.net/manual/en/function.array-multisort.php

Comments

1

usort function is what you're looking for:

<?php
    function cmp($a, $b) {
        return $b["status"] - $a["status"];
    }

    $sorted = usort($your_array, "cmp");
    var_dump($sorted);
?>

Comments

0

Try this

function cmp_by_status($a, $b)
{
    if ($a['status'] == $b['status']) {
        return 0;
    }
    return ($a['status'] < $b['status') ? -1 : 1;
}

usort($data_array, "cmp_by_status");

Comments

0

I have added this answer at Sort multi-dimensional array by specific key sort the array specific key to sorting array value.

function sortBy($field, &$array, $direction = 'asc')
{
    usort($array, create_function('$a, $b', '
        $a = $a["' . $field . '"];
        $b = $b["' . $field . '"];

        if ($a == $b)
        {
            return 0;
        }

        return ($a ' . ($direction == 'desc' ? '>' : '<') .' $b) ? -1 : 1;
    '));

    return true;
}

Call this function by specific array key

sortBy('status',   $array);

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.