array_udiff
array_diffとほぼ同じ
第3引数に比較関数を使う点が異なる
docs
docsには比較関数の返り値は、-1,0,1のいずれかにしろって書いているが、
実際の挙動は、
0ならarray_diffでの、diffなし
-1ならarray_diffでの、diffあり
と同じになる
1のときの挙動はよくわからんmrsekut.icon*2
https://wandbox.org/permlink/bCmuSeiqU7H5dxdJ
code: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に対しての追加対象を返す
宇宙船演算子を使ってる
こう書いても同じ
code:php
function compare($a, $b) {
//return $a'id' <=> $b'id';
return $a'id' == $b'id' ? 0 : -1;
};
1にすると結果がわけかわからんくなる
code:php
function compare($a, $b) {
return $a'id' == $b'id' ? 0 : 1;
};