array_udiff データの比較にコールバック関数を用い、配列の差を計算する 説明 arrayarray_udiff arrayarray1 arrayarray2 array ... callbackdata_compare_func array_udiff は、他の引数のいずれにも存在しない array1 の値の全てを有する配列を返します。 キーと値の関係は維持されることに注意してください。 データの比較には data_compare_func が用いられます。 この関数は、1 つめの引数が 2 つめより小さい / 等しい / 大きい 場合にそれぞれ 負の数 / ゼロ / 正の数 を返す必要があります。 この関数は array_diff に似ていますが、こちらは データの比較に内部関数を利用します。 <function>array_udiff</function> の例 priv_member = $val; } function comp_func_cr($a, $b) { if ($a->priv_member === $b->priv_member) return 0; return ($a->priv_member > $b->priv_member)? 1:-1; } } $a = array("0.1" => new cr(9), "0.5" => new cr(12), 0 => new cr(23), 1=> new cr(4), 2 => new cr(-15),); $b = array("0.2" => new cr(9), "0.5" => new cr(22), 0 => new cr(3), 1=> new cr(4), 2 => new cr(-15),); $result = array_udiff($a, $b, array("cr", "comp_func_cr")); print_r($result); ?> ]]> &example.outputs; cr Object ( [priv_member:private] => 12 ) [0] => cr Object ( [priv_member:private] => 23 ) ) ]]> この関数は n 次元配列の一つの次元しかチェックしないことに注意してください。 もちろん、array_udiff($array1[0], $array2[0], "data_compare_func"); のようにすることでより深い次元でのチェックもできます。 array_diff, array_diff_assoc, array_diff_uassoc, array_udiff_assoc, array_udiff_uassoc, array_intersect, array_intersect_assoc, array_uintersect, array_uintersect_assoc および array_uintersect_uassoc も参照ください。