php數(shù)組去重的三種方法:使用 array_unique() 函數(shù),根據(jù)元素值去除重復(fù)值,保留鍵值順序。使用 array_filter() 函數(shù),基于回調(diào)函數(shù)的條件移除重復(fù)元素。使用 splobjectstorage 類,利用對(duì)象唯一性的特性實(shí)現(xiàn)數(shù)組去重,保留鍵值關(guān)聯(lián)。
如何實(shí)現(xiàn) PHP 數(shù)組中數(shù)據(jù)的去重
數(shù)組去重是指去除數(shù)組中重復(fù)的值,獲得一個(gè)只包含唯一值的新數(shù)組。PHP 提供了幾種方法來(lái)實(shí)現(xiàn)數(shù)組去重:
使用 array_unique() 函數(shù)
array_unique() 是一個(gè)內(nèi)置函數(shù),專門用于去除數(shù)組中的重復(fù)值。它根據(jù)每個(gè)元素的值進(jìn)行比較,并返回一個(gè)僅包含唯一元素的新數(shù)組。語(yǔ)法如下:
array_unique(array $array);
登錄后復(fù)制
示例:
$numbers = [1, 2, 3, 4, 5, 1, 2, 3]; $unique_numbers = array_unique($numbers); print_r($unique_numbers);
登錄后復(fù)制
輸出:
Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
[4] => 5
)
登錄后復(fù)制登錄后復(fù)制
注意: array_unique() 會(huì)保留鍵值順序,但如果需要,可以使用 array_values() 函數(shù)將保留的鍵值變?yōu)檫B續(xù)的數(shù)字。
使用 array_filter() 函數(shù)
array_filter() 函數(shù)可以根據(jù)回調(diào)函數(shù)的條件將數(shù)組中的某些元素移除。它會(huì)將滿足回調(diào)函數(shù)返回 true 的元素保留在數(shù)組中,而將其他元素過(guò)濾掉。
示例:
$numbers = [1, 2, 3, 4, 5, 1, 2, 3];
$unique_numbers = array_filter($numbers, function($value, $index) {
return array_search($value, $numbers) === $index;
});
print_r($unique_numbers);
登錄后復(fù)制
輸出:
Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
[4] => 5
)
登錄后復(fù)制登錄后復(fù)制
注意: 此回調(diào)函數(shù)檢查每個(gè)元素在數(shù)組中出現(xiàn)的第一個(gè)索引是否與當(dāng)前索引相同,以確定它是否是一個(gè)唯一值。
使用 SplObjectStorage 類
SplObjectStorage 類是一種更高級(jí)的存儲(chǔ)對(duì)象集合的容器。可以將它用作散列表,其中對(duì)象是鍵,而關(guān)聯(lián)的值是保留的值。由于散列表不允許重復(fù)鍵,因此可以使用 SplObjectStorage 來(lái)實(shí)現(xiàn)數(shù)組去重。
示例:
$numbers = [1, 2, 3, 4, 5, 1, 2, 3];
$unique_numbers = new SplObjectStorage();
foreach ($numbers as $number) {
$unique_numbers->attach($number);
}
foreach ($unique_numbers as $number) {
echo $number . "\n";
}
登錄后復(fù)制
輸出:
1 2 3 4 5
登錄后復(fù)制
注意: 這種方法利用了對(duì)象不能重復(fù)的特性。SplObjectStorage 中的鍵是不唯一的,因?yàn)槊總€(gè)對(duì)象都有一個(gè)不同的身份。因此,它可以有效地去除數(shù)組中的重復(fù)值。






