php数组比较函数array_diff问题

<?php
$a = array(1,1);
$b = array(0,1,2);
var_dump(array_diff($a, $b));
?>

为什么这两个数组比较出来竟然是array(0) {
},也就是说是一样的??
求一个保险的对比两个数组元素的方法....不需要管下标和元素顺序,但是元素出现的次数需要一致

如果你想比较两个数组是否相同的话,可以这样比较
$a = array(1,1);
$b = array(0,1,2);
if( $a==$b ){
echo 'same';
}else{
echo 'different';
}追问

我当然知道==这个操作符,但是这个太简陋了,不满足我的需求

比如我要(0,1,2)和(1,0,2)相等
这个操作符就不行

追答

你需要排除顺序的话,用sort()
$a = array(0,1,2);sort($a);
$b = array(1,0,2);sort($b);
if( $a==$b ){
echo 'same';
}else{
echo 'different';
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-06-05
你这是啊,array_diff()返回的是差集数组,输出就是array(0)了,你在写个3就看出来了追问

也就是说他只判断$a中的元素在$b中有没有出现,而且还是忽略重复元素的,那有没有自带的不忽略重复元素的比较数组的函数??
我能想到的不自己写for循环判断的方法就只有
return count(array_merge(array_diff($a, $b), array_diff($b,$a)));
这个办法了....
但是总感觉这样效率不高

追答

你是求交集吧

追问

就是判断两个数组是否相等,这样写就判断返回值是不是0,对吗??

追答

array_diff(),如果返回值为空,表示两个数组相同,否则就不同,

$flag = array_diff($a,$b);

if(empty($flag)){
    echo  '相同';
}else{
    echo  '不相同';
}

追问

囧rz,我提问里面就是这么写的,但是两个不相同的数组却返回空数组了啊...

第2个回答  2013-06-05
结果是对的(空数组)
也就是从a中除去在b中出现过的元素,无论出现多少次追问

但是$b[0]=0和$b[2]=2这两个元素在a中没有啊,这不算??
这函数的算法到底是什么样的啊?

追答

没有的就不理,只去除共有的

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网