首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >array_udiff的特殊行为?

array_udiff的特殊行为?
EN

Stack Overflow用户
提问于 2012-07-10 17:45:36
回答 2查看 276关注 0票数 1

我有以下Php脚本:

代码语言:javascript
复制
<?php
function filt($k, $l){
    if($k===$l){
        var_dump("valid: ".$k."-".$l);
        return 0;
    }
    return 1;
}
$a6=array(7, 9, 3, 33);
$a7=array(2, 9, 3, 33);
$u=array_udiff($a6, $a7, "filt");
var_dump($u);
?>

输出如下:

代码语言:javascript
复制
string 'valid: 3-3' (length=10)

array
    0 => int 7
    1 => int 9
    3 => int 33

据我所知,array_udiff应该转储相等的值,只让第一个数组中的值不同。这里似乎出了什么问题?我在Windows7上运行WampServer版本2.2,版本: 5.3.9。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-10 17:52:54

您没有返回所有必需的值(例如-1,0,1)。请参阅:array_udiff

代码语言:javascript
复制
$a6 = array(7, 9, 3, 33);
$a7 = array(2, 9, 3, 33);

$u = array_udiff($a6, $a7, function ($k, $l){
  return $k > $l ? 1 : ($k < $l ? -1 : 0);
});

print_r($u);
票数 3
EN

Stack Overflow用户

发布于 2012-07-10 17:53:24

请注意,文档中说:

代码语言:javascript
复制
The comparison function must return an integer less than, equal to, or
greater than zero if the first argument is considered to be respectively
less than, equal to, or greater than the second.

你不能这么做。要确保这样做,只需使您的filt函数返回$l - $k

对此有一个简单的解释:元素可以是任何顺序的。为了避免将每个元素与每个其他元素进行比较,它首先对它们进行排序。这就是为什么你需要+/0/-

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11410623

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档