generated at
array_udiff
array_diffとほぼ同じ
第3引数に比較関数を使う点が異なる




docsには比較関数の返り値は、 -1 , 0 , 1 のいずれかにしろって書いているが、
実際の挙動は、
0 ならarray_diffでの、diffなし
-1 ならarray_diffでの、diffあり
と同じになる
1 のときの挙動はよくわからんmrsekutmrsekut


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に対しての追加対象を返す
宇宙船演算子を使ってる
こう書いても同じ
php
function compare($a, $b) { //return $a['id'] <=> $b['id']; return $a['id'] == $b['id'] ? 0 : -1; };
1 にすると結果がわけかわからんくなる
php
function compare($a, $b) { return $a['id'] == $b['id'] ? 0 : 1; };