array_diff
(PHP 4 >= 4.0.1, PHP 5, PHP 7)
array_diff — 配列の差を計算する
説明
array_diff
( array $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]);
のようにすることでより深い次元でのチェックもできます。
参考
- array_diff_assoc() - 追加された添字の確認を含めて配列の差を計算する
- array_udiff() - データの比較にコールバック関数を用い、配列の差を計算する
- array_intersect() - 配列の共通項を計算する
- array_intersect_assoc() - 追加された添字の確認も含めて配列の共通項を確認する