【问题标题】:php usort on different valuesphp对不同的值进行排序
【发布时间】:2012-05-20 13:23:41
【问题描述】:

我正在使用这个 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,但效果不佳,它有点打乱它们。

提前致谢。

【问题讨论】:

    标签: php multidimensional-array usort


    【解决方案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/

    【讨论】:

    • 是的,我对数组太糟糕了。现在测试,我会在几秒钟内通知你
    【解决方案2】:

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

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

    【讨论】:

    • 不行,不活跃的还是和活跃的混在一起的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-20
    相关资源
    最近更新 更多