我想通过'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)
答案 0 :(得分:1)
代码中唯一可能导致此操作不起作用的是return $a["hits"]>$b["hits"];
。您的函数应仅返回1 / -1(不是true / false),因此将该行更改为:return $a["hits"]>$b["hits"]?1:-1;
并且它应该按预期工作。
果然,它有效:http://codepad.org/ItyIa7fB