這篇文章主要介紹PHP中usort()的使用方法,有興趣的朋友參考下,希望對大家有幫助。
函數為陣列進行自己自訂排序,排序規則由 $cmp_function 定義。
傳回值為ture 或false。
現在先對簡單的一個函數進行分析:
<?php function re($a,$b){ return ($a<$b)?1:-1; }5 $x=array(1,3,2,5,9); usort($x, 're') print_r($x); ?>
列印結果為:
Array( [0] => 9 [1] => 5 [2] => 3 [3] => 2 [4] => 1<br>)
實現了陣列的倒序排列。分析如下:
usort兩兩擷取陣列中的數值,並依序輸入自訂函數中,自訂函數依內容傳回1或-1;usort依傳回值為1或-1 ,得到傳入的數值1「大於」或「小於」數值2,然後對數值進行從小到大的排序。 即:傳回值為1,說明數值1「大於」數值2,然後排序:數值2—>數值1;傳回值為-1,說明數值1「小於」數值2,然後排序:數值1->數值2。
上面自訂函數中,$a<$b如果正確返回1,說明$a"大於"$b,則按照順序$b->$a來排序;如果錯誤返回-1,說明說明$a"小於"$b,則依序$a->$b來排序。
下面進行一個較為複雜的排序:對一個陣列先奇後偶,然後再進行從大到小排序。
function Compare($str1, $str2) { if (($str1 % 2 == 0) && ($str2 %2 == 0)) { if ($str1 > $str2) return - 1; else return 1; } if ($str1 % 2 == 0) return 1; if ($str2 % 2 == 0) return -1; return ($str2 > $str1) ? 1 : - 1; } $scores = array (22,57,55,12,87,56,54,11); usort ( $scores, 'Compare' ); print_r ( $scores );
實作步驟為:
1》判斷輸入的兩個值是否都為偶數,都為偶數,進行從大到小排序;
2》如果不都是偶數,則至少一個為奇數,先判斷$str1是否為偶數,如果為偶數,即:if($str1%2==0)成立,則返回1,意味著$str1“大於”$str2 ,則usort函數進行排序為「小的」$str2->「大的」$str1(偶數);
3》如果$str1為奇數,上面不傳回任何值,接著判斷$str2是否為偶數,如果為偶數,則返回-1,意味著$str1“小於”$str2,則usort函數進行排序為“小的”$str1(奇數)->“大的”$str2(偶數) ;
4》如果兩個值都為奇數,則上面不傳回任何值,接著對$str1和$str2進行從大到小排序;
輸出結果為:
Array( [0] => 87 [1] => 57 [2] => 55 [3] => 11 [4] => 56 [5] => 54 [6] => 22 [7] => 12 )
相關推薦:
PHP_I love U之(1) php衣食父母:使用usort()函數為二維數組排序
以上是PHP中usort()的使用方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!