我的调用中有一个自定义回调,array_uintersect()
因为在比较两个多维数组之间的行时,我需要区分大小写比较两个元素中的字符串。
function filterIdenticalEntriesCallback($a, $b) {
echo "<tr><td>{$a['file']}</td><td>{$b['file']}</td><td>{$a['md5']}</td><td>{$b['md5']}</td></tr>";
if ( (strcmp($a['file'], $b['file']) == 0 ) && ( strcmp($a['md5'],$b['md5']) == 0)){
return 0;
}
return 1;
}
$vieja = array(
array('file' => 'a', 'md5' => '1'), //cambia
array('file' => 'b', 'md5' => '2'), //igual
array('file' => 'c', 'md5' => '3'), //igual
array('file' => 'd', 'md5' => '4'), //igual
);
$nueva = array(
array('file' => 'a', 'md5' => '2'), //cambia
array('file' => 'b', 'md5' => '2'), //igual
array('file' => 'c', 'md5' => '3'), //igual
array('file' => 'd', 'md5' => '4'), //igual
);
echo "<table>";
$ignorar = array_uintersect($nueva, $vieja, 'filterIdenticalEntriesCallback');
echo "</table>";
echo "<pre>";
print_r($ignorar);
echo "</pre>";
?>
输出
b a 2 2
b c 2 3
d b 4 2
a c 2 3
b a 2 1
b c 2 3
d b 4 2
a c 1 3
c c 3 3
c a 3 2
a a 2 1
a b 2 2
a d 2 4
Array
(
[2] => Array
(
[file] => c
[md5] => 3
)
)
我不明白为什么这段代码不能产生正确的输出,它应该是一个包含“B”、“C”和“D”元素的数组,因为只有“A”元素与 $vieja 和 $nueva 不同。 .
如果我使两个“A”元素都等于输出就可以了....
编辑:
function filterIdenticalEntriesCallback($a, $b) {
echo "<tr><td>{$a['file']}</td><td>{$b['file']}</td><td>{$a['md5']}</td><td>{$b['md5']}</td></tr>";
if (strcmp($a['file'], $b['file']) == 0 ){
if ( strcmp($a['md5'],$b['md5']) == 0)
return 0;
else return 1;
} else return -1;
}
使用此回调可以正常工作,但我仍然不明白为什么...... -1 和 1 回调结果对函数意味着什么?我的意思是,我只需要相等的值...当回调返回 0 时...我不需要其他情况...