PHP中多维数组的数组\多排序问题

PHP中多维数组的数组\多排序问题,php,sorting,Php,Sorting,我有以下数组: array(10) { [0]=> array(109) { ["id"]=> string(4) "2632", ["_category_sortorder"] => 8, ["_sortorder" => 1] }, [1]=> array(109) { ["id"]=> string(4) "2635", ["_category_s

我有以下数组:

array(10) { 
        [0]=> array(109) {  
            ["id"]=> string(4) "2632", ["_category_sortorder"] => 8, ["_sortorder" => 1] 
        },
        [1]=> array(109) {  
            ["id"]=> string(4) "2635", ["_category_sortorder"] => 5, ["_sortorder" => 2] 
        },
        ...
}
我想根据两个标准对其进行排序:

a) 按
\u类别\u排序器
asc(具有优先级)

b) 通过
\u分拣机
asc

我试过这个:

foreach($resources as $k => $v) {
    $sort[$k]['_category_sortorder'] = $resources[$k]['_category_sortorder'];
    $sort[$k]['_sortorder'] = $resources[$k]['_sortorder'];
 }

array_multisort($sort['_category_sortorder'], SORT_ASC, $sort['_sortorder'], SORT_ASC, $resources);
但它并没有像预期的那样工作。有什么建议吗?

试试这个

$sort = array(
                array("id"=>"263", "_category_sortorder"=> 8, "_sortorder" => 1),
                array( "id"=>  "145", "_category_sortorder" => 155, "_sortorder" => 2),
                array( "id"=>  "2145", "_category_sortorder" => 55, "_sortorder" => 12),
                array( "id"=>  "3145", "_category_sortorder" => 155, "_sortorder" => 10),
            );

usort($sort, function(array $a, array $b) {
    return $b['_category_sortorder'] - $a['_category_sortorder'];
});


echo '<pre>';
print_r($sort);
echo '</pre>';
$sort=array(
数组(“id”=>“263”、“\u category\u sortorder”=>8、\u sortorder”=>1),
数组(“id”=>“145”、“\u category\u sortorder”=>155、\u sortorder”=>2),
数组(“id”=>“2145”、“\u类别\u排序器”=>55、\u排序器”=>12),
数组(“id”=>“3145”、“类别”=>155、“\u排序器”=>10),
);
usort($sort,function(数组$a,数组$b){
返回$b[“类别”排序器]-$a[“类别”排序器];
});
回声';
打印(排序);
回声';

我认为有一个简单的解决方案,但此代码块所做的是: 将数组拆分为子数组,其中仅包含具有相同_category_sortorder值的元素。然后使用usort对每个子数组进行排序。最后,将它们合并在一起


try
usort()
并定义排序行为可以尝试翻转数组
array\u multisort($sort[''u sortorder',sort\u ASC,$sort[''u category\u sortorder',sort\u ASC,$resources)谢谢,这适用于
\u category\u sortorder
,但是
\u sortorder
呢?再次调用
usort
?是的,如果要使用_sortorder对其进行排序,则需要再次执行。但请记住,在临时数组中按_category_sortorder对数组进行排序,否则它将丢失
<?php
    $array = [
        ['id' => 1, '_category_sortorder' => 2, '_sortorder' => 1],
        ['id' => 2, '_category_sortorder' => 2, '_sortorder' => 3],
        ['id' => 3, '_category_sortorder' => 3, '_sortorder' => 19],
        ['id' => 4, '_category_sortorder' => 1, '_sortorder' => 2],
        ['id' => 5, '_category_sortorder' => 1, '_sortorder' => 1],
    ];

    foreach ($array as $value) {
        if (!isset($newElements[$value['_category_sortorder']]))
            $newElements[$value['_category_sortorder']] = [];
        $newElements[$value['_category_sortorder']][] = $value;
    }


    $array = [];
    foreach ($newElements as $key => $value) {
        usort($value, function($a, $b) {
            return strcmp($a["_sortorder"], $b["_sortorder"]);
        });
        $array[$key] = $value;
    }

    ksort($array);
    $new = [];
    foreach ($array as $value) {
        $new = array_merge($new, $value);
    }
    echo "<pre>".print_r($new, true).'</pre>';