Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/239.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php uasort,强制一个元素位于顶部,其余元素正确排序在底部_Php_Cakephp - Fatal编程技术网

Php uasort,强制一个元素位于顶部,其余元素正确排序在底部

Php uasort,强制一个元素位于顶部,其余元素正确排序在底部,php,cakephp,Php,Cakephp,甚至可以对数组进行排序,使一个元素(在本例中,与当前用户匹配的元素)冒泡到顶部,而其余元素在其下面正确排序吗 我试着这样做(是的,我的PHP版本中没有闭包,这很遗憾),但没有成功 uasort($output, create_function('$a,$b', 'if( $a["user_id"] == '.$this->user['id'].') { r

甚至可以对数组进行排序,使一个元素(在本例中,与当前用户匹配的元素)冒泡到顶部,而其余元素在其下面正确排序吗

我试着这样做(是的,我的PHP版本中没有闭包,这很遗憾),但没有成功

    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,以便顺序不会更改。哦,这就是它的工作原理!外部/内部迭代器类比非常合理。谢谢!