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

比較元の配列。

arrays

比較対象の配列。

戻り値

array のエントリのうち、他のどの配列にも含まれない要素のみを含む配列を返します。 array の配列のキーは維持されます。

変更履歴

バージョン説明
8.0.0 この関数は、引数をひとつだけ渡しても呼び出せるようになりました。 これより前のバージョンでは、少なくともふたつの引数が必須でした。

例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]); のようにすることでより深い次元でのチェックもできます。

参考

To Top