按x排序php数组然后y

时间:2012-07-02 08:38:16

标签: php arrays sorting multidimensional-array

我想通过'hits'对数组进行排序,但我也想查找一个特定的ID并将其设置为第一次迭代,然后继续'命中'排序。

例如,我有一个多维数组:

$myarray = array(
    array(
        "id"=>10,
        "hits"=>80
    ),
    array(
        "id"=>14,
        "hits"=>50
    ),
    array(
        "id"=>15,
        "hits"=>700
    ),
    array(
        "id"=>18,
        "hits"=>200
    )
);

我想测试id是否是特定的东西,即如果id == 18然后将其放在第一位,然后按命中排序。我怎么做,使用usort和自定义函数?

我想我正在寻找类似的东西:

function customsort($a,$b){
    if($a["id"]==18){ //or b==18?
        return -1;
    } else {
        return $a["hits"]>$b["hits"];
    }
}

usort($myarray,"customsort");

我想要的结果是订单:

array(
    "id"=>18,
    "hits"=>200
),
array(
    "id"=>14,
    "hits"=>50
),
array(
    "id"=>10,
    "hits"=>80
),
array(
    "id"=>15,
    "hits"=>700
)

(或者如果他们被标记为ABCD,那么我需要它为DBAC)

1 个答案:

答案 0 :(得分:1)

代码中唯一可能导致此操作不起作用的是return $a["hits"]>$b["hits"];。您的函数应仅返回1 / -1(不是true / false),因此将该行更改为:return $a["hits"]>$b["hits"]?1:-1;并且它应该按预期工作。

果然,它有效:http://codepad.org/ItyIa7fB