array_diff

配列の差を計算する

説明

array array_diff(array $array, array ...$arrays)

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

参考

  • array_diff_assoc
  • array_udiff
  • array_intersect
  • array_intersect_assoc