在PHP中,有時候我們需要對一個數組的元素進行排序,但是我們又不能破壞原數組的結構。這時候就可以使用PHP內置函數argsort()。
argsort()函數是一個非常實用的排序函數, 它會返回一組排序后的原數組下標的索引,而不是數組的元素。這些索引可以用于以特定順序訪問帶有復雜值和結構的數組。
下面舉個例子:
$age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43"); print_r(array_keys($age,37)); //輸出 "Array ( [0] =>Ben )" echo ""."
"; $output = array_keys($age); print_r($output); //輸出 "Array ( [0] =>Peter [1] =>Ben [2] =>Joe )" echo ""."
"; asort($age); print_r($age); //輸出 "Array ( [Peter] =>35 [Ben] =>37 [Joe] =>43 )" echo ""."
"; $keys = array_keys($age); print_r($keys); //輸出 "Array ( [0] =>Peter [1] =>Ben [2] =>Joe )" echo ""."
";
在上面的例子中,我們定義了一個數組$age,并使用array_keys()函數獲取了數值為37的元素下標,查詢到為Ben。接著我們輸出了所有的數組下標,當然這個操作也可以用array_keys()函數來做。接下來我們對數組進行了排序,使用asort()函數將數組按升序排序。再通過array_keys()函數獲取排序后的新數組下標,再進行輸出,此時數組的順序就發生了變化。
當然上述例子僅僅是數組操作中argsort()函數的一個很簡單的應用,實際上,argsort()函數還有許多用法和注意事項,下面請繼續看下去。
argsort()函數的原型如下:
array argsort ( array &$array [, int $sort_flags = SORT_REGULAR ] )
其中,第一個參數是要排序的原始數組,第二個參數是所使用的排序類型,默認值為SORT_REGULAR。
需要注意的是,函數將會改變原始數組的順序,如果你需要保留原始數組的順序,那么你可以通過將原始數組復制到另一個數組中來實現。同樣,返回的排序結果中也只是下標,你還需要使用array_values()函數來取出數據。
下面是在PHP7中的使用例子:
$array = ['Hello', 'World', 'PHP']; $indexes = array_keys($array); //獲取索引 array_multisort($array, SORT_ASC, SORT_STRING, $indexes, SORT_ASC, SORT_NUMERIC); //多維數組排序 $result = array_map(function($index) use ($array) { //重構數組 return $array[$index]; }, $indexes); print_r($result); //輸出 "Array ( [0] =>Hello [1] =>PHP [2] =>World )"
在上面的例子中,首先我們定義了一個包含字符串元素的數組$array,并利用array_keys()函數獲得了含有元素下標的索引數組$indexes。隨后我們使用array_multisort()函數,將$array和$indexes同時進行排序。需要注意的是函數需要先按$indexes數組的默認類型升序排序,再按照數組內部結果升序排序,這個需要特別注意。最后,我們使用array_map()函數重構數組,并最終輸出結果。
雖然argsort()函數不一定是所有PHP程序員都使用的,但是在實際使用中,它是非常方便和實用的,特別是在需要對數組進行排序時,它可以幫你實現穩定排序,提高排序的效率。