今天我們來說一說PHP中的一個非常實用的函數(shù)——array_unique()。
array_unique()函數(shù)可以用于去除數(shù)組中重復(fù)的值,將所有重復(fù)的值保留一次,返回一個新的數(shù)組。
下面我們來看看如何使用array_unique()函數(shù)。
$colors = array("red", "green", "blue", "red", "yellow", "green"); $new_colors = array_unique($colors); print_r($new_colors);
以上代碼將輸出:
Array ( [0] =>red [1] =>green [2] =>blue [4] =>yellow )
我們可以看到,$new_colors數(shù)組已經(jīng)去掉了重復(fù)的"red"和"green"。
執(zhí)行array_unique()函數(shù)時,函數(shù)會比較數(shù)組中每一個值的類型,并且保留相同值的第一個出現(xiàn)的鍵名。
下面我們添加一個關(guān)聯(lián)數(shù)組,來更好地了解array_unique()函數(shù)的行為。
$person = array( "name" =>"John", "age" =>30, "name2" =>"Tom", "age2" =>30 ); $new_person = array_unique($person); print_r($new_person);
執(zhí)行以上代碼時,將會得到錯誤提示“Warning: array_unique() expects parameter 1 to be array, array given in...”。
為什么會出現(xiàn)這種錯誤呢?原因是array_unique()函數(shù)只能用于處理普通數(shù)組,無法處理關(guān)聯(lián)數(shù)組。但我們可以先將關(guān)聯(lián)數(shù)組使用array_values()函數(shù)轉(zhuǎn)換成普通數(shù)組,再使用array_unique()函數(shù)。
$person = array( "name" =>"John", "age" =>30, "name2" =>"Tom", "age2" =>30 ); $new_person = array_unique(array_values($person)); print_r($new_person);
以上代碼將會輸出:
Array ( [0] =>John [1] =>30 [2] =>Tom )
現(xiàn)在,$new_person數(shù)組已經(jīng)去掉了重復(fù)的"30"。
為了更好地體會array_unique()函數(shù),我們再來展示一段關(guān)于多維數(shù)組的代碼。
$people = array( array("name" =>"John", "age" =>30), array("name" =>"Tom", "age" =>30), array("name" =>"John", "age" =>30) ); $unique_people = array_map("unserialize", array_unique(array_map("serialize", $people))); print_r($unique_people);
以上代碼將會輸出:
Array ( [0] =>Array ( [name] =>John [age] =>30 ) [1] =>Array ( [name] =>Tom [age] =>30 ) )
我們可以看到,$unique_people數(shù)組已經(jīng)去掉了重復(fù)的"name" =>"John", "age" =>30。
總的來說,array_unique()函數(shù)是一個非常實用的函數(shù),可以用于過濾掉數(shù)組中重復(fù)的值。但需要注意的是,它只能用于處理普通數(shù)組,無法用于關(guān)聯(lián)數(shù)組。