array_diffの挙動

Symfonyの実装を読んでいて気になったので調査。

ドキュメントによると、
PHP: array_diff - Manual

array array_diff ( array $array1 , array $array2 [, array $... ] )
  • array1 を array2 と比較し、その差を返します。

ということらしい。

「差」ってなんだよ!

ということで調べた。

<?php
$test1_arr = array('red','blue','green');
$test2_arr = array('red','blue');
var_dump(array_diff($test1_arr,$test2_arr));
$ php test.php 
array(1) {
  [2] =>
  string(5) "green"
}

ふむふむ。確かに差が出力されている。

ではこれは?

<?php
$test1_arr = array('red','blue','green');
$test2_arr = array('red','blue','green','yellow');
var_dump(array_diff($test1_arr,$test2_arr));

yellowが出力されると思うだろ?

$ php test.php 
array(0) {
}

!?
はい。
php先生にはいつも驚かされます。

ということで、

array array_diff ( array $array1 , array $array2 [, array $... ] )
  • array1とarray2を比較し、array1に入っているがarray2には入っていない要素を配列で返す

という意味のようです。