在PHP中,有時(shí)候需要對(duì)數(shù)組進(jìn)行排序或者進(jìn)行多重排序,這時(shí)候就需要用到array_multisort()函數(shù)。該函數(shù)可以根據(jù)多個(gè)條件對(duì)數(shù)組進(jìn)行排序,可以使用數(shù)組的鍵和值來(lái)排序,也可以將多個(gè)數(shù)組合并成一個(gè)數(shù)組,并按多個(gè)條件對(duì)其進(jìn)行排序。下面通過(guò)一些示例來(lái)介紹array_multisort()函數(shù)的使用。
1. 根據(jù)多個(gè)鍵對(duì)數(shù)組進(jìn)行排序
$items = array( array("id" =>1, "name" =>"John", "age" =>30), array("id" =>2, "name" =>"Mike", "age" =>25), array("id" =>3, "name" =>"Alex", "age" =>35), array("id" =>4, "name" =>"Bob", "age" =>20) ); //根據(jù)姓名和年齡對(duì)數(shù)組進(jìn)行排序 $name = array(); $age = array(); foreach ($items as $key =>$row) { $name[$key] = $row["name"]; $age[$key] = $row["age"]; } array_multisort($name, SORT_ASC, $age, SORT_DESC, $items); //輸出排序后的數(shù)組 print_r($items);
上述代碼中,首先將“姓名”和“年齡”兩個(gè)鍵分別存儲(chǔ)到數(shù)組$name和$age中,然后使用array_multisort()函數(shù)對(duì)數(shù)組$items進(jìn)行排序,第一個(gè)參數(shù)為排序的鍵,第二個(gè)和第四個(gè)為排序方式,分別為升序(SORT_ASC)和降序(SORT_DESC)。
2. 根據(jù)值對(duì)多個(gè)數(shù)組進(jìn)行排序
$name = array("John", "Mike", "Alex", "Bob"); $age = array(30, 25, 35, 20); $height = array(170, 180, 175, 165); //根據(jù)年齡對(duì)數(shù)組進(jìn)行排序 array_multisort($age, SORT_DESC, $name, $height); //輸出排序后的數(shù)組 print_r($name); print_r($age); print_r($height);
上述代碼中,將“姓名”、“年齡”、“身高”三個(gè)數(shù)組進(jìn)行了排序,其中以“年齡”為排序依據(jù)。可以看到,通過(guò)array_multisort()函數(shù)可以同時(shí)對(duì)多個(gè)數(shù)組進(jìn)行排序。
3. 根據(jù)鍵對(duì)關(guān)聯(lián)數(shù)組進(jìn)行排序
$array = array( "John" =>30, "Mike" =>25, "Alex" =>35, "Bob" =>20 ); //根據(jù)鍵對(duì)數(shù)組進(jìn)行排序 ksort($array); $values = array_values($array); //根據(jù)值對(duì)數(shù)組進(jìn)行排序 array_multisort($values, SORT_DESC, $array); //輸出排序后的數(shù)組 print_r($array);
上述代碼中,通過(guò)ksort()函數(shù)對(duì)數(shù)組按照鍵進(jìn)行排序,然后使用array_values()函數(shù)將數(shù)組值按照索引重新排序,最后使用array_multisort()函數(shù)對(duì)數(shù)組進(jìn)行排序。可以看到,通過(guò)array_multisort()函數(shù)可以不僅按照值,還可以按照鍵對(duì)關(guān)聯(lián)數(shù)組進(jìn)行排序。
總之,array_multisort()函數(shù)可以很方便地對(duì)數(shù)組進(jìn)行多重排序,而不僅僅是簡(jiǎn)單的按照鍵或者值進(jìn)行排序。如果需要在PHP中進(jìn)行多重排序的時(shí)候,不妨試試使用array_multisort()函數(shù)。