Php/docs/function.array-diff

提供:Dev Guides
< Php
移動先:案内検索

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

参考