オブジェクトの配列が 2 つあります。オブジェクトの特定の属性に基づいて違いを見つける
ためにやりたいことは、別の属性が等しい場合です。
私のコードの縮小版は(ここで見ることができます);
<?php
echo "Testing\n";
$aud1 = new stdClass();
$aud1->code = 'Z1';
$aud1->sub_list = '2, 3, 1';
$aud2 = new stdClass();
$aud2->code = 'Z2';
$aud2->sub_list = '2, 4, 1';
$aud3 = new stdClass();
$aud3->code = 'Z3';
$aud3->sub_list = '2, 3, 1';
$aud4 = new stdClass();
$aud4->code = 'Z2';
$aud4->sub_list = '2, 3, 1';
$array1 = array(
$aud1,
$aud3
);
$array2 = array(
$aud2,
$aud4
);
echo "\nsample A\n";
print_r($array1);
echo "\nsample B\n";
print_r($array2);
$arrdiff1 = array_values(array_udiff($array1, $array2, 'myDiff'));
echo "\nIn A but not in B\n";
print_r($arrdiff1);
$arrdiff2 = array_values(array_udiff($array2, $array1, 'myDiff'));
echo "\nIn B but not in A\n";
print_r($arrdiff2);
function myDiff($a, $b) {
if ($a->code == $b->code) {
return strcmp($a->sub_list, $b->sub_list);
} else {
return 0;
}
}
?>
A がZ2 2,3,1で B がZ2 2,4,1であるという違いが見られることを期待しています。
これが表示されないのはなぜですか?
更新
@pilsetnieksが言うように、私は自分の要素を混同してしまいました - 十分なコーヒーがありません。
しかし、なぜ $arraDiff1 に表示されないのか、私は混乱しています。
ここでコードを更新しました。