array_udiff
第3引数に比較関数を使う点が異なる
docsには比較関数の返り値は、 -1
, 0
, 1
のいずれかにしろって書いているが、
実際の挙動は、
と同じになる
1
のときの挙動はよくわからん


php// 元の配列
$a = [['id' => 1],['id' => 2],['id' => 3]];
// 比較対象
$b1 = [['id' => 1],['id' => 2]]; // 少ない
$b2 = [['id' => 1],['id' => 2],['id' => 3],['id'=>4]]; // 多い
$b3 = [['id' => 1],['id' => 2],['id' => 3]]; // 同じ
$b4 = [['id' => 1],['id' => 2],['id' => 4]]; // 少ない&多い
function compare($a, $b) {
return $a['id'] <=> $b['id'];
};
print_r(array_udiff($a, $b1, 'compare')); // $aに対しての削除対象を返す
print_r(array_udiff($b2, $a, 'compare')); // $aに対しての追加対象を返す
こう書いても同じ
phpfunction compare($a, $b) {
//return $a['id'] <=> $b['id'];
return $a['id'] == $b['id'] ? 0 : -1;
};
1
にすると結果がわけかわからんくなる
phpfunction compare($a, $b) {
return $a['id'] == $b['id'] ? 0 : 1;
};