Php uasort,强制一个元素位于顶部,其余元素正确排序在底部
甚至可以对数组进行排序,使一个元素(在本例中,与当前用户匹配的元素)冒泡到顶部,而其余元素在其下面正确排序吗 我试着这样做(是的,我的PHP版本中没有闭包,这很遗憾),但没有成功Php uasort,强制一个元素位于顶部,其余元素正确排序在底部,php,cakephp,Php,Cakephp,甚至可以对数组进行排序,使一个元素(在本例中,与当前用户匹配的元素)冒泡到顶部,而其余元素在其下面正确排序吗 我试着这样做(是的,我的PHP版本中没有闭包,这很遗憾),但没有成功 uasort($output, create_function('$a,$b', 'if( $a["user_id"] == '.$this->user['id'].') { r
uasort($output, create_function('$a,$b',
'if( $a["user_id"] == '.$this->user['id'].') { return -1; }'.
'elseif( $b["user_id"] == '.$this->user['id'].') { return -1; }'.
'elseif( $b["percent"] == $a["percent"]) { return strcasecmp($a["username"], $b["username"]);
'elseif($a["percent"] < $b["percent"]) { return 1; }'.
'elseif($a["percent"] > $b["percent"]) { return -1; }'.
'else { return 0; }'
));
uasort($output,create_函数($a,$b),
'如果($a[“user_id”]='.$this->user['id'.]){return-1;}'。
'elseif($b[“user_id”]='.$this->user['id'.]){return-1;}'。
'elseif($b[“percent”]==$a[“percent”]){return strcasecmp($a[“username”],$b[“username”]);
'elseif($a[“percent”]<$b[“percent”]){return 1;}'。
'elseif($a[“percent”]>$b[“percent”]){return-1;}。
'else{return 0;}'
));
我认为这是最好的方法,因为我必须对数组进行排序——但我愿意接受建议
提前Thx。最好的方法可能是:
function sortWithUserFirst($output) {
$user_ids = Set::extract('/user_id', $output); // list of user ids
$user_id_key = array_search($this->user['id']);
$user_record = $output[$user_id_key];
unset($output[$user_id_key]); // clear the key => value pair
uasort($output, your_sort_function);
array_unshift($output, $user_record); // put the user record at the beginning of the array
}
标记为答案,但我真的希望有一种方法可以一次性完成。我想我不太理解排序中的比较输出?它是否应该工作,如果我手动确保when
if($user\id==12)返回-1
(作为示例)该记录将冒泡到顶部?问题是因为您正在检查$a['user\u id']和$b['user\u id']是否都等于您的目标值。将$a视为外部循环迭代器,将$b视为内部循环迭代器-您正在将$b与$a进行比较,因此您实际上应该只检查$a['user\u id']等于您的目标值,并在$b['user_id']执行此操作时返回0,以便顺序不会更改。哦,这就是它的工作原理!外部/内部迭代器类比非常合理。谢谢!