配列の差を計算する

# array_diff

(PHP 4 >= 4.0.1, PHP 5, PHP 7, PHP 8)

array_diff — 配列の差を計算する

### 説明

function 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
    )

`(string) $elem1 === (string) $elem2` の場合のみ、 つまり、文字列表現 が同等な場合のみ、 2つの要素は等しいとみなされます。

例2 型が一致しない場合の array_diff() の例

    <?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') のインスタンスが一つ含まれます。
    var_dump($result);
    ?>

別の比較関数を使いたい場合は、array_udiff() を参照ください。

### 注意

> 注意:

> この関数は n 次元配列の一つの次元しかチェックしません。 もちろん、`array_diff($array1[0], $array2[0]);` のようにすることでより深い次元でのチェックもできます。

### 参考

- array_diff_assoc() - 追加された添字の確認を含めて配列の差を計算する
- array_udiff() - データの比較にコールバック関数を用い、配列の差を計算する
- array_intersect() - 配列の共通項を計算する
- array_intersect_assoc() - 追加された添字の確認も含めて配列の共通項を確認する

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open