繁体   English   中英

如何根据多个条件对数组进行排序?

[英]How to sort an array based on multiple criteria?

我想按数组中的两个条件排序。 第一个标准是第二个类别和标题。

我尝试使用usort(),但不起作用。

有没有一个PHP函数来做到这一点?

我原来的数组:

Array
(
    [0] => stdClass Object
    (
        [id] => 1
        [category] => cat1
        [title] => title1
    )
[1] => stdClass Object
    (
        [id] => 3
        [category] => cat2
        [title] => z
    )       
[2] => stdClass Object
    (
        [id] => 2
        [category] => cat1
        [title] => title2
    )
[3] => stdClass Object
    (
        [id] => 4
        [category] => cat2
        [title] => a
    )
)

我要这样:

Array
(
    [0] => stdClass Object
    (
        [id] => 1
        [category] => cat1
        [title] => title1
    )
[1] => stdClass Object
    (
        [id] => 2
        [category] => cat1
        [title] => title2
    )       
[2] => stdClass Object
    (
        [id] => 4
        [category] => cat2
        [title] => a
    )
[3] => stdClass Object
    (
        [id] => 3
        [category] => cat2
        [title] => z
    )               
)

谢谢。

我没有尝试太多,因为我找到了一种方法:

usort($object, 'sort');
function sort($a,$b){
if($a->category == $b->category){
    if($a->title == $b->title){
        return 0;
    }else{
        return ($a->title < $b->title) ? -1 : 1;
    }
}else{
    return ($a->category < $b->category) ? -1 : 1;
}
}

但它也可以与multisort()一起使用:

foreach ($object as $sort_key => $sort_row) {
    $category[$sort_key]  = $sort_row->acls_category;
    $title[$sort_key] = $sort_row->acls_title;
}
array_multisort($category, SORT_ASC, $title, SORT_ASC, $object);
$o1 = new stdClass;
$o1->id = 1;
$o1->category = 'cat1';
$o1->title = 'title1';

$o2 = new stdClass;
$o2->id = 3;
$o2->category = 'cat2';
$o2->title = 'z';

$o3 = new stdClass;
$o3->id = 2;
$o3->category = 'cat1';
$o3->title = 'title2';

$o4 = new stdClass;
$o4->id = 4;
$o4->category = 'cat2';
$o4->title = 'a';

$arr = array($o1, $o2, $o3, $o4);

usort($arr, function($a, $b) {
    $catCmp = strcmp($a->category, $b->category);

    if ($catCmp) {
        return $catCmp;
    }

    return strcmp($a->title, $b->title);
});

var_dump($arr);

暂无
暂无

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

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