私は異なるフォーマットの異なるデータソースの2つのデータ配列を持っていますが、それらは同じリソースを表しています。したがって、一方のid
は、例えば他方のと同じです。PHP配列の相違の種類
現在、私は配列のうちの1つを他のものと一致するように変換してから、array_udiff
でそれらを実行して違いを得ます。
しかし、3つのプロパティを比較して一致するかどうかを確認する必要があるため、3つのフィールドが一致するか一致しないため、-1,0,1を返すことはできません。
私は単純に返す-1または0の場合、それは$b
から$a
を比較する動作しますが、$b
$arr_a = [['id'=>1, 'a'=>1, 'b'=>0],['id'=>2, 'a'=>2, 'b'=>3],['id'=>3, 'a'=>1, 'b'=>0]];
$arr_b = [['id'=>3, 'a'=>1, 'b'=>0],['id'=>4, 'a'=>2, 'b'=>3],['id'=>5, 'a'=>1, 'b'=>0]];
function diff($a, $b) {
if(($a['id'] == $b['id'])
&& ($a['a'] == $b['a'])
&& ($a['b'] == $b['b'])
) {
return 0;
} else {
return -1;
}
$not_in_b = array_udiff($arr_a, $arr_b,'diff');
$not_in_a = array_udiff($arr_b, $arr_a,'diff');
print_r($not_in_b);
print_r($not_in_a);
$a
に上記のリターンを比較失敗...
Array
(
[0] => Array
(
[id] => 1
[a] => 1
[b] => 0
)
[1] => Array
(
[id] => 2
[a] => 2
[b] => 3
)
)
Array
(
[0] => Array
(
[id] => 3
[a] => 1
[b] => 0
)
[1] => Array
(
[id] => 4
[a] => 2
[b] => 3
)
[2] => Array
(
[id] => 5
[a] => 1
[b] => 0
)
)
あなたが見ることができるように$a
〜$b
の差分は動作しますが、$b
〜$a
はありません...
...
この作品
UPDATEが、キーとして3つの特定のプロパティ値を持つ2つのアレイを作製...
$arr_a = [['id'=>1, 'a'=>1, 'b'=>0],['id'=>2, 'a'=>2, 'b'=>3],['id'=>3, 'a'=>1, 'b'=>0]];
$arr_b = [['id'=>3, 'a'=>1, 'b'=>0],['id'=>4, 'a'=>2, 'b'=>3],['id'=>5, 'a'=>1, 'b'=>0]];
$arra_a_keys=[];
foreach($arr_a as $item) {
$arra_a_keys[$item['id'].'_'.$item['a'].'_'.$item['b']] = $item;
}
$arra_b_keys=[];
foreach($arr_b as $item) {
$arra_b_keys[$item['id'].'_'.$item['a'].'_'.$item['b']] = $item;
}
$not_in_b = array_diff_key($arra_a_keys, $arra_b_keys);
$not_in_a = array_diff_key($arra_b_keys, $arra_a_keys);
print_r($not_in_b);
print_r($not_in_a);
「いずれも動作していません」。とにかく試したコードを表示して、それがうまくいかないところで_を記述してください。 –
どのような比較基準がありますか? 'id'と' guid'だけが一致しますか? – sevavietl
@PatrickQ私はいくつかの詳細を含む例を追加しました... –