array_diff
(PHP 4 >= 4.0.1, PHP 5, PHP 7, PHP 8)
array_diff — 計算陣列的差集
說明
array_diff(array
$array
, array ...$arrays
): array
對比 array
和其他一個或者多個數組,返回在
array
中但是不在其他 array 里的值。
參數
-
array
-
要被對比的陣列
-
arrays
-
和更多陣列進行比較
返回值
返回一個陣列,該陣列包括了所有在
array
中但是不在任何其它參數陣列中的值。注意鍵名保留不變。
保留陣列 array
里的鍵。
範例
示例 #1 array_diff() 例子
<?php
$array1 = array("a" => "green", "red", "blue", "red");
$array2 = array("b" => "green", "yellow", "red");
$result = array_diff($array1, $array2);
print_r($result);
?>
在 $array1 中多次出現的值一樣處理,輸出結果為:
Array ( [1] => blue )
示例 #2 array_diff() 不匹配型別的示例
兩個元素只有在 (string) $elem1 === (string) $elem2
相等時視為一致。 也就是字串轉換表達相同。
<?php
// 陣列無法轉換成字串時會產生 Notice 警告
$source = [1, 2, 3, 4];
$filter = [3, 4, [5], 6];
$result = array_diff($source, $filter);
// 而這個就可以,因為對象可以轉換成字串
class S {
private $v;
public function __construct(string $v) {
$this->v = $v;
}
public function __toString() {
return $this->v;
}
}
$source = [new S('a'), new S('b'), new S('c')];
$filter = [new S('b'), new S('c'), new S('d')];
$result = array_diff($source, $filter);
// $result 包含了一個 S('a'); 實例
?>
想要使用函式來比較,可使用 array_udiff()。
註釋
注意:
注意本函式只檢查了多維陣列中的一維。當然可以用
array_diff($array1[0], $array2[0]);
檢查更深的維度。
參見
- array_diff_assoc() - 帶索引檢查計算陣列的差集
- array_udiff() - 用回撥函式比較數據來計算陣列的差集
- array_intersect() - 計算陣列的交集
- array_intersect_assoc() - 帶索引檢查計算陣列的交集