2013-11-24 112 views
0

我想检查数组的前三个字段与另一个数组的前三个来获取唯一值。 (想想三列组成的主键要添加已经不在表中的行)PHP array_udiff()不能按预期工作

这是我到目前为止的代码

function udiffanswers($a, $b) { 
    if ($a['aid']==$b['aid'] && $a['qid']==$b['qid'] && $a['sid']==$b['sid']){ 
     return 0 
    } else { 
     return -1 
    } 
} 

我的一个阵列x具有值(459458,0, 461541)和我的其他y有相同的价值,并没有正确排除它。如果y的值是(459458,1,461541),它也不应该排除它,因为它作为一个整体是唯一的。

样本数据会$a

[1] => Array 
    (
     [aid] => 10 
     [qid] => 10 
     [sid] => 10 
     [freetext] => sq file 
     [a] => hi 
     [b] => 
     [c] => 
     [d] => 
     [e] => 
     [f] => 
     [g] => 
     [h] => 
     [i] => 
     [j] => 
     [type] => freetext 
     [location] => 
    ) 

[2] => Array 
    (
     [aid] => 10 
     [qid] => 1 
     [sid] => 10 
     [freetext] => diff 
     [a] => diff 
     [b] => diff 
     [c] => diff 
     [d] => diff 
     [e] => diff 
     [f] => diff 
     [g] => diff 
     [h] => diff 
     [i] => diff 
     [j] => diff 
     [type] => diff 
     [location] => diff 
    ) 

$b

[23] => Array 
    (
     [aid] => 10 
     [qid] => 2 
     [sid] => 10 
     [freetext] => adfadf 
     [a] => adfadf 
     [b] => adfadf 
     [c] => adfadf 
     [d] => adfadf 
     [e] => adfadf 
     [f] => adfadf 
     [g] => adfadf 
     [h] => adfadf 
     [i] => adfadf 
     [j] => adfadf 
     [type] => adfadf 
     [location] => adfadf 
    ) 
    [50] => Array 
    (
     [aid] => 10 
     [qid] => 10 
     [sid] => 10 
     [freetext] => sq file 
     [a] => hi 
     [b] => 
     [c] => 
     [d] => 
     [e] => 
     [f] => 
     [g] => 
     [h] => 
     [i] => 
     [j] => 
     [type] => freetext 
     [location] => 
    ) 

应返回从$aarray[2],但它也从你的阵列

+1

请发表您的样本数据和期望的结果 –

+0

回报($ A [ '援助'] - $ B [ '援助'])&&($ A [ 'QID'] - $ B [ 'QID' ]))&&($ a ['sid'] - $ b ['sid']);会返回TRUE或FALSE。 – Jompper

+0

在上面发布了一些示例数据 –

回答

0

片前三个元素返回数组重复并比较它们。

$newA = array_splice($a,0,3); 
$newB = array_splice($b,0,3); 

print_r(array_diff_assoc($newA, $newB));