简体   繁体   中英

PHP Sorting Multidimensional Associative Array by Key and Value

I'm trying to sort the following data by the date in the key and the value of Name.

The aim is to a get nice date ordered array with all the Names from the inner array in alphabetical order.

Array
(
    [2017-07-27] => Array
        (
            [0] => stdClass Object
                (
                    [Job] => stdClass Object
                        (
                            [Name] => Orange
                        )

                )

            [4] => stdClass Object
                (
                    [Job] => stdClass Object
                        (
                            [Name] => Apple
                        )

                )
        )
    [2017-07-22] => Array
        (
            [6] => stdClass Object
                (
                    [Job] => stdClass Object
                        (
                            [Name] => Apple
                        )

                )

            [7] => stdClass Object
                (
                    [Job] => stdClass Object
                        (
                            [Name] => Orange
                        )

                )
        )
    [2017-07-29] => Array
        (
            [9] => stdClass Object
                (
                    [Job] => stdClass Object
                        (
                            [Name] => Orange
                        )

                )

            [11] => stdClass Object
                (
                    [Job] => stdClass Object
                        (
                            [Name] => Plumb
                        )

                )
        )
)

I'm pretty sure I should be using array_multisort but can't quite get the desired results.

You must split the code if you want to order on object properties, use the usort function.

Where $arr is your array:

uksort($arr, 'dateCmp');
foreach($arr as &$sub){
    usort($sub, 'propCmp');
}

function dateCmp($a, $b){
    return (strtotime($a) < strtotime($b) ? -1 : 1);
}

function propCmp($a, $b){
    return ($a->Job->Name < $b->Job->Name ? -1 : 1);
}

Please try below code,

$sorted_vals = array();
ksort($multiArrs);
foreach($multiArrs as $key => $value) { // $multiArrs = your data array
    $columns = null;
    foreach ($value as $index => $element) {
        $columns[] = $element->Job;
    }
    $temp = $value;
    array_multisort($columns, SORT_ASC, $temp);
    $sorted_vals[$key] = $temp;
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM