實(shí)際開(kāi)發(fā)中,多多少少都會(huì)遇到數(shù)組的排序問(wèn)題,除了常規(guī)的寫(xiě)簡(jiǎn)單的排序算法,PHP 還提供了內(nèi)置數(shù)組排序函數(shù),本次重點(diǎn)分享一下:uasort使用用戶自定義的比較函數(shù)對(duì)數(shù)組中的值進(jìn)行排序并保持索引關(guān)聯(lián),可排序多維數(shù)組,本文重點(diǎn)講解此函數(shù)。
uasort 函數(shù)
參數(shù)類型:booluasort(array &$array,callable $cmp_function)
本函數(shù)對(duì)數(shù)組排序并保持索引和單元之間的關(guān)聯(lián)。
主要用于對(duì)那些單元順序很重要的結(jié)合數(shù)組進(jìn)行排序。比較函數(shù)是用戶自定義的。
成功時(shí)返回TRUE, 或者在失敗時(shí)返回FALSE。
數(shù)組排序?qū)嵗ǚ?a href='http://www.survivalescaperooms.com/tag/class_1248_1.html' target='_blank'>class中):
1 /** 2 * 自定義排序函數(shù) 3 * @param $param1 4 * @param $param2 5 * @return 0(不移動(dòng)) 1(正向調(diào)換順序) -1(逆向調(diào)換順序) 6 */ 7 8 function my_sort($param1, $param2){ 9 if($param1 == $param2) return 0;10 else return $param1 > $param2 ? 1 : -1;11 }12 13 $arr = array(14 'a'=>'20',15 'b'=>'1',16 'c'=>'10',17 'd'=>'5',18 'e'=>'21',19 'f'=>'4',20 'g'=>'3',21 );22 23 uasort($arr, 'my_sort');24 25 var_dump($arr);26 27 /*輸出值28 array (size=7)29 'b' => string '1' (length=1)30 'g' => string '3' (length=1)31 'f' => string '4' (length=1)32 'd' => string '5' (length=1)33 'c' => string '10' (length=2)34 'a' => string '20' (length=2)35 'e' => string '21' (length=2)36 */
多維數(shù)組排序?qū)嵗ǚ莄lass中):
/** * 自定義排序函數(shù) * @param $param1 * @param $param2 * @return 0(不移動(dòng)) 1(正向調(diào)換順序) -1(逆向調(diào)換順序) */function my_sort($param1, $param2){ if($param1['value'] == $param2['value']) return 0; else return $param1['value'] > $param2['value'] ? 1 : -1;}$arr = array( 'a'=>array('key'=>'定義1', 'value'=>'20'), 'b'=>array('key'=>'定義2', 'value'=>'1'), 'c'=>array('key'=>'定義3', 'value'=>'10'), 'd'=>array('key'=>'定義4', 'value'=>'5'), 'e'=>array('key'=>'定義5', 'value'=>'21'), 'f'=>array('key'=>'定義6', 'value'=>'4'), 'g'=>array('key'=>'定義7', 'value'=>'3'), );uasort($arr, 'my_sort');var_dump($arr);/*輸出值array (size=7) 'b' => array (size=2) 'key' => string '定義2' (length=7) 'value' => string '1' (length=1) 'g' => array (size=2) 'key' => string '定義7' (length=7) 'value' => string '3' (length=1) 'f' => array (size=2) 'key' => string '定義6' (length=7) 'value' => string '4' (length=1) 'd' => array (size=2) 'key' => string '定義4' (length=7) 'value' => string '5' (length=1) 'c' => array (size=2) 'key' => string '定義3' (length=7) 'value' => string '10' (length=2) 'a' => array (size=2) 'key' => string '定義1' (length=7) 'value' => string '20' (length=2) 'e' => array (size=2) 'key' => string '定義5' (length=7) 'value' => string '21' (length=2)*/class中排序,為了方便以二維數(shù)組為例:
uasort($arr1, array($this, 'public_my_sort'));
uasort($arr2, array('self', 'self_my_sort'));
class myClassSort{ /** * 排序主方法 * @param $arr1 self靜態(tài)排序 * @param $arr2 this排序 * @return 排序后的數(shù)組 */ public function main($arr1 = array(), $arr2 = array()){ uasort($arr1, array($this, 'public_my_sort')); uasort($arr2, array('self', 'self_my_sort')); return array('arr1'=>$arr1, 'arr2'=>$arr2); } /** * 自定義排序函數(shù) * @param $param1 * @param $param2 * @return 0(不移動(dòng)) 1(正向調(diào)換順序) -1(逆向調(diào)換順序) */ private static function self_my_sort($param1, $param2){ if($param1['value'] == $param2['value']) return 0; else return $param1['value'] > $param2['value'] ? 1 : -1; } //同上 public function public_my_sort($param1, $param2){ if($param1['value'] == $param2['value']) return 0; else return $param1['value'] > $param2['value'] ? 1 : -1; } }$arr = array( 'a'=>array('key'=>'定義1', 'value'=>'20'), 'b'=>array('key'=>'定義2', 'value'=>'1'), 'c'=>array('key'=>'定義3', 'value'=>'10'), 'd'=>array('key'=>'定義4', 'value'=>'5'), 'e'=>array('key'=>'定義5', 'value'=>'21'), 'f'=>array('key'=>'定義6', 'value'=>'4'), 'g'=>array('key'=>'定義7', 'value'=>'3'), ); $myClassSort = new myClassSort();var_dump($myClassSort->main($arr, $arr));/*輸出結(jié)果同以上實(shí)例*/類似函數(shù)擴(kuò)展
array_multisort對(duì)多個(gè)數(shù)組或多維數(shù)組進(jìn)行排序,但是最終填入使用的還是具體一維數(shù)組
arsort 對(duì)一維數(shù)組進(jìn)行逆向排序并保持索引關(guān)系,保持索引對(duì)應(yīng)關(guān)系
asort對(duì)一維數(shù)組進(jìn)行正向排序并保持索引關(guān)系,保持索引對(duì)應(yīng)關(guān)系
krsort對(duì)數(shù)組按照鍵名逆向排序,保持索引對(duì)應(yīng)關(guān)系
ksort對(duì)數(shù)組按照鍵名正向排序,保持索引對(duì)應(yīng)關(guān)系
natcasesort用“自然排序”算法對(duì)一維數(shù)組進(jìn)行不區(qū)分大小寫(xiě)字母的排序,可以用來(lái)排序數(shù)組內(nèi)容中字母數(shù)字混合的情況,保持索引對(duì)應(yīng)關(guān)系
natsort用“自然排序”算法對(duì)一維數(shù)組排序,區(qū)分大小寫(xiě)字母,可以用來(lái)排序數(shù)組內(nèi)容中字母數(shù)字混合的情況,保持索引對(duì)應(yīng)關(guān)系
rsort對(duì)一維數(shù)組逆向排序,不保持索引對(duì)應(yīng)關(guān)系
sort對(duì)一維數(shù)組正向排序,不保持索引對(duì)應(yīng)關(guān)系
uasort使用用戶自定義的比較函數(shù)對(duì)數(shù)組中的值進(jìn)行排序并保持索引關(guān)聯(lián),可排序多維數(shù)組,本文重點(diǎn)講解此函數(shù)
uksort使用用戶自定義的比較函數(shù)對(duì)數(shù)組中的鍵名進(jìn)行排序
usort使用用戶自定義的比較函數(shù)對(duì)數(shù)組中的值進(jìn)行排序,不保持索引關(guān)聯(lián)
PHP編程鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。
新聞熱點(diǎn)
疑難解答
圖片精選