(PHP 4 >= 4.0.1, PHP 5, PHP 7, PHP 8)
array_diff — 配列の差を計算する
$array
, array ...$arrays
): 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
の場合のみ、
つまり、文字列表現 が同等な場合のみ、
2つの要素は等しいとみなされます。
<?php
// 以下の例は、配列が文字列にキャストできないので警告が発生します
$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() を参照して下さい。
注意:
この関数は n 次元配列の一つの次元しかチェックしません。 もちろん、
array_diff($array1[0], $array2[0]);
のようにすることでより深い次元でのチェックもできます。