めも。
array_diffは与えた配列全てにおいてプライマリーな値を返却するのではなく、あくまでも第1引数に与えた配列内に存在している値のみを返却するという点に注意。
たとえば下記のような処理を行った場合、結果は以下の通りとなる。
$a = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); $b = array(6, 7, 8, 9, 10, 11, 12, 13, 14, 15); $c = array_diff($a, $b); ↓ array(5) { [0]=> int(1) [1]=> int(2) [2]=> int(3) [3]=> int(4) [4]=> int(5) }
ここで期待していた結果は両配列の差分である「1,2,3,4,5」に「11,12,13,14,15」を加えたものであったが、どうやら第一引数が所有している値のみを返却する模様。array_diff()を用いた後に、array_intersect()などで、どちらか一方の配列に含まれていることを保証させるような処理を書く必要がないことを今更ながら学んだ。
今回の件はむしろこの挙動であってくれたほうが都合が良かったが、今後嵌りそうなTIPSとして覚えておこう。