array_udiff没有按预期工作

时间:2013-05-22 14:29:18

标签: php arrays

我有两个对象数组 我想做什么来根据对象的某个属性找出差异 IF 另一个属性是相等的。

我的代码的缩减版本是(viewable here);

<?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 所说,我的元素混淆了 - 没有足够的咖啡。

BUt我很困惑为什么不出现在$ arraDiff1中 Updated code here

1 个答案:

答案 0 :(得分:2)

您的比较函数首先比较code属性,Z1Z3$array1Z2$array2。因此,您的功能始终为return 0