PHP 數組去重時指定去除重復元素的依據
php 的 array_unique() 函數用于去除數組中重復元素,其缺省使用嚴格相等 (===)。我們可以通過自定比較函數來指定去重依據:創建自定比較函數,指定去重的標準(例如根據元素長度);將自定比較函數作為第三個參數傳遞給 array_unique() 函數,即可根據指定的標準去除重復元素。
使用 PHP 數組_unique() 函數指定去重依據
簡介
函數用于從一個數組中去除重復元素。默認情況下,它使用嚴格相等 () 來判定重復元素。但是,我們可以通過提供一個自定比較函數來指定去重依據,從而根據不同的標準去除重復元素。
代碼示例
<?php
// 創建一個包含重復元素的數組
$arr = array(
'a', 'b', 'c', 'd',
'a', 'c', 'e', 'f'
);
// 使用默認的嚴格相等比較器去除重復元素
print_r(array_unique($arr));
// 自定比較器,根據元素長度去除重復元素
$length_comparator = function($a, $b) {
return strlen($a) == strlen($b);
};
// 使用自定比較器去除重復元素
print_r(array_unique($arr, SORT_REGULAR, $length_comparator));
?>
輸出結果
Array
(
[0] => a
[1] => b
[2] => c
[3] => d
[4] => e
[5] => f
)
Array
(
[0] => a
[1] => b
[2] => c
[4] => d
[6] => e
)
實戰案例
假設我們有一個學生對象的數組,每個對象都有一個名字和年齡。我們可以使用 函數和一個自定比較器來去除具有相同年齡的學生:
<?php
class Student {
public $name;
public $age;
}
// 創建一個包含具有相同年齡的學生對象的數組
$students = array(
new Student('Alice', 20),
new Student('Bob', 20),
new Student('Carol', 21),
new Student('Dave', 21),
);
// 自定比較器,根據學生的年齡去除重復元素
$age_comparator = function($a, $b) {
return $a->age == $b->age;
};
// 使用自定比較器去除重復元素
$unique_students = array_unique($students, SORT_REGULAR, $age_comparator);
// 打印唯一學生的姓名
foreach ($unique_students as $student) {
echo $student->name . '<br>';
}
?>
輸出結果
Alice
Carol
相關推薦
-
C++ 友元函數詳解:如何限制友元函數的訪問權限?
c++++ 中友元函數可以通過訪問說明符或名稱空間限制訪問權限,以實現僅允許特定函數或特定命名空間內的函數訪問類的私有成員。C++ 友元函數詳解:如何限制友元函數的訪問權限?在 C++ 中,友元函數是
-
C++ 虛擬函數詳解:解答多態機制之謎
c++++虛擬函數是實現多態性的關鍵,它允許派生類覆蓋父類的行為:聲明為虛函數,并在派生類中出現。調用時,編譯器根據對象類型動態解析正確的函數版本。純虛函數強制派生類提供自己的實現,以實現多態性。派生
-
C++ 內聯函數的調用機制詳解
內聯函數在編譯時展開,消除函數調用開銷,提升性能。1. 調用機制:編譯器將內聯函數代碼直接插入調用位置,無需函數調用機制。2. 實戰案例:游戲開發等場景需要快速計算時使用內聯函數。3. 限制:不得包含
-
golang函數類型的線程安全
解答:是的,go 語言中函數類型可以通過使用互斥體保護并發操作來定義為線程安全。詳細描述:線程安全函數可以在并發 goroutine 中使用而不會導致數據損壞。定義線程安全函數類型時,應使用互斥體(s
-
C++ 虛擬函數與對象模型:深入理解面向對象設計
虛擬函數允許子類覆蓋基類的函數,實現多態行為。它改變了對象模型,允許子類修改基類方法的實現。實戰案例中,shape 基類定義了 draw() 方法,而子類 rectangle 和 circle 覆蓋此















