繁体   English   中英

PHP按键和值对多维关联数组排序

[英]PHP Sorting Multidimensional Associative Array by Key and Value

我正在尝试通过键中的日期和Name的值对以下数据进行排序。

目的是要获得一个具有良好日期顺序的数组,其中内部数组中的所有名称均按字母顺序排列。

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
                        )

                )
        )
)

我很确定我应该使用array_multisort但是不能完全达到预期的效果。

如果要按对象属性排序,则必须拆分代码,请使用usort函数。

其中$ arr是您的数组:

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

请尝试以下代码,

$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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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