在PHP編程中常會遇到需要對數(shù)組進(jìn)行去重、排序等操作的需求。而array_unique() 和sort() 便是兩個非常重要的函數(shù)。
array_unique() 函數(shù)用于去除數(shù)組中重復(fù)的元素,對數(shù)組進(jìn)行無序去重。該函數(shù)返回一個新的數(shù)組,并保留原數(shù)組鍵值關(guān)系。比如:
$array = array('apple', 'banana', 'banana', 'watermelon', 'orange', 'apple'); $new_array = array_unique($array); print_r($new_array); // Result: Array ( [0] =>apple [1] =>banana [3] =>watermelon [4] =>orange )我們發(fā)現(xiàn)經(jīng)過去重的數(shù)組已經(jīng)沒有重復(fù)的元素了,而且仍然保留了原數(shù)組的鍵值關(guān)系。值得注意的是,該函數(shù)去重時默認(rèn)為弱類型比較,也就是說,在進(jìn)行去重比較時,不僅需要元素的值相同,還需要數(shù)據(jù)類型相同才會被視為重復(fù)元素。 sort() 函數(shù)用于對數(shù)組按照索引排序,該函數(shù)可以按照升序或降序排序,也可以自定義排序規(guī)則。比如:
$array = array('apple', 'banana', 'watermelon', 'orange'); sort($array); print_r($array); // Result: Array ( [0] =>apple [1] =>banana [2] =>orange [3] =>watermelon )我們看到,經(jīng)過sort() 函數(shù)排序后,原來的數(shù)組已經(jīng)按照字母升序排序了。需要注意的是sort() 函數(shù)排序的方式默認(rèn)為升序排序,并且只能對索引數(shù)組進(jìn)行排序,而不適用于關(guān)聯(lián)數(shù)組。同時,sort() 函數(shù)會重新建立新數(shù)組鍵值,原數(shù)組中原來的鍵名將會丟失。 那么如果我們需要對數(shù)組進(jìn)行排序,并且保留原數(shù)組鍵值關(guān)系呢?使用asort() 函數(shù)進(jìn)行排序即可,比如:
$array = array('apple' =>10, 'banana' =>20, 'watermelon' =>5, 'orange' =>15); asort($array); print_r($array); // Result: Array ( [watermelon] =>5 [apple] =>10 [orange] =>15 [banana] =>20 )我們看到,通過asort() 函數(shù)對原數(shù)組進(jìn)行排序后,不僅保留了原來的鍵值關(guān)系,而且同樣按照升序排序。需要注意的是,與sort() 函數(shù)不同,asort() 函數(shù)排序結(jié)果中鍵名被保留。 當(dāng)然,如果想要自定義排序規(guī)則,同樣可以通過usort() 函數(shù)進(jìn)行,如下所示:
function cmp($a, $b){ if ($a == $b) return 0; return ($a< $b) ? -1 : 1; } $array = array(3, 2, 5, 6, 1); usort($array, "cmp"); print_r($array); // Result: Array ( [0] =>1 [1] =>2 [2] =>3 [3] =>5 [4] =>6 )此時,我們自定義了一個函數(shù),用于進(jìn)行排序判斷。通過usort() 函數(shù)即可對數(shù)組按照自定義規(guī)則進(jìn)行排序。 總結(jié)起來,在PHP中,對數(shù)組進(jìn)行去重操作常用array_unique() 函數(shù),而對數(shù)組進(jìn)行排序常用sort()、asort() 或usort() 函數(shù)。在使用這些函數(shù)時,需要注意排序方式以及鍵值關(guān)系的保持問題,否則可能會造成問題。當(dāng)然,還有很多其他的PHP數(shù)組操作函數(shù)可以使用,需要仔細(xì)閱讀文檔才能更好地使用它們。