php usort对不同的价值观

时间:2012-05-20 13:23:41

标签: php multidimensional-array usort

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

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

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

提前致谢。

2 个答案:

答案 0 :(得分: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/

答案 1 :(得分:0)

只需在活动中添加活动内容作为另一种比较:

if ($a['active'] > $b['active'])
   return 1;
} else if ($a['value'] == $b['value']) {
   return 0;
} else {
   return ($a['value'] < $b['value']) ? -1 : 1;
}