0

我正在使用这个 usort 函数按值对数组进行排序:

    function cmp($a, $b)
    {
        if ($a["value"] == $b["value"])
        { return 0; }
        return ($a["value"] < $b["value"]) ? -1 : 1;
    }

现在,每个对象也有一个“active”字段,即:$a["active"]。我希望排序后的数组首先按值排序活动的(1),然后,当所有这些都排序时,非活动的(0)。在此之后我尝试使用另一个 usort,但它不能很好地工作,它有点打乱它们。

提前致谢。

4

2 回答 2

1
function cmp($a,$b){
    if ($a["active"]==$b["active"]){
        if($a["value"]==$b["value"])
            return 0;
        return $a["value"]>$b["value"])?1:-1;
    }
    return $a["active"]>$b["active"]?1:-1;
}

未经测试 - 但我认为它会工作。这类东西的一个很好的资源(但不是这个特殊的例子,不幸的是你):http ://www.the-art-of-web.com/php/sortarray/

于 2012-05-20T13:31:40.017 回答
0

只需在函数中添加活动的东西作为另一个比较:

if ($a['active'] > $b['active'])
   return 1;
} else if ($a['value'] == $b['value']) {
   return 0;
} else {
   return ($a['value'] < $b['value']) ? -1 : 1;
}
于 2012-05-20T13:30:51.037 回答