1

我想按“命中”对数组进行排序,但我也想查找特定 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)

4

1 回答 1

1

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

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

于 2012-07-02T08:51:10.617 回答