php数组比对删除重复

$arr1=array(1,2,3,3,4,5,6,7);$arr2=array(1,2,3,3,3,4,4,4,5,6,6,7);有2个数组,以数组2为主体,比对数组1... $arr1 = array(1,2,3,3,4,5,6,7);
$arr2 = array(1,2,3,3,3,4,4,4,5,6,6,7);
有2个数组, 以数组2为主体, 比对数组1. 当有重复值时, 删除数组里面的第一个重复值.
也就是说这2个数组比对后, $arr2的结果应该为:
$arr2 = array(3,4,4,6);
这个要怎么做到呢. 有大神吗, 简直跪了
展开
 我来答
ennano
2015-07-10 · TA获得超过1744个赞
知道小有建树答主
回答量:813
采纳率:100%
帮助的人:299万
展开全部
这个算法比较好理解并且算法复杂度和内存消耗可控
最终结果数组是下标从0开始重置的,并且2个数组的数字可以乱序排,通用性比较强

<?php
$arr1 = array(1,2,3,3,4,5,6,7);
$arr2 = array(1,2,3,3,3,4,4,4,5,6,6,7);

$c1 = count ($arr1);
$c2 = count ( $arr2 );

for($x=0; $x<$c1; $x++)
{
    for($y=0; $y<$c2; $y++)
    {
        if($arr1[$x] == $arr2[$y])  // 每找到一个相等的,就同时把2个数组对应元素都置临时值
        {
            $arr2[$y] = -999;  
            $arr1[$x] = -9999;
        }
    }
}


while(1)                    // 去掉数组2的临时值并重置下标
{
    $key = array_search(-999, $arr2);      
    if ($key !== false)
        array_splice($arr2, $key, 1); // 不用unset,因为要重置数组下标
    else
        break;
}
print_r($arr2);
追问
谢谢 大神. 因为有好几个人都给出了可行了答案, 我只能给分答案最好的那个了. 谢谢大神
simple丶魂
2015-07-10 · TA获得超过1294个赞
知道小有建树答主
回答量:511
采纳率:0%
帮助的人:292万
展开全部

相比之下, 我的方法更简便一些, 代码量也少.

$arr1 = array(1,2,3,3,4,5,6,7);
$arr2 = array(1,2,3,3,3,4,4,4,5,6,6,7);
foreach($arr1 as $k1=>$v1)
{
    $c = array_search($v1,$arr2);
    unset($arr2[$c]);
}
print_r($arr2);
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友a19d193
2015-07-10 · TA获得超过3446个赞
知道大有可为答主
回答量:1464
采纳率:100%
帮助的人:1444万
展开全部
$arr1 = array(1,2,3,3,4,5,6,7);
$arr2 = array(1,2,3,3,3,4,4,4,5,6,6,7);
$cArr1 = array_count_values($arr1);
$cArr2 = array_count_values($arr2);
$diff = array();
foreach ($cArr2 as $key => $value) {
    if (! isset($cArr1[$key])) {
        $exists = 0;
    } else {
        $exists = $cArr1[$key];
    }
    $length = $value - $exists;
    if ($length > 0) {
        $diff = array_merge($diff, array_fill(1, $length, $key));
    }
}
print_r($diff);

结果

$cArr1中数字出现次数

Array
(
   [1] => 1
   [2] => 1
   [3] => 2
   [4] => 1
   [5] => 1
   [6] => 1
   [7] => 1
)

$cArr2中数字出现次数

Array
(
   [1] => 1
   [2] => 1
   [3] => 3
   [4] => 3
   [5] => 1
   [6] => 2
   [7] => 1
)

最终结果

Array
(
   [0] => 3
   [1] => 4
   [2] => 4
   [3] => 6
)

追问
谢谢 大神. 因为有好几个人都给出了可行了答案, 我只能给分答案最好的那个了. 谢谢大神
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
林大哥的文库
2015-07-10 · TA获得超过366个赞
知道小有建树答主
回答量:652
采纳率:0%
帮助的人:298万
展开全部
<?php
$arr1 = array(1,2,3,3,4,5,6,7);
$arr2 = array(1,2,3,3,3,4,4,4,5,6,6,7);

$i = 0;
$j = count ( $arr2 );
$result = array ();
while ( $i < $j ) {
if (!in_array ( $arr1 [$i], $arr2 )) {
array_push ( $result, $arr2 [$i] );
}
$i ++;
}
var_dump($result);
追问
不行哟, 结果不是 (3,4,4,6)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
kof_snower
2015-07-10 · TA获得超过158个赞
知道小有建树答主
回答量:192
采纳率:0%
帮助的人:146万
展开全部
$arr1 = array(1,2,3,3,4,5,6,7);
$arr2 = array(1,2,3,3,3,4,4,4,5,6,6,7);
$count1 = count($arr1);
$count2 = count($arr2);
if($count1 > $count2)
{
$size = $count1;
}
else
{
$size = $count2;
}
$arr3 = array();
$y = 0;
$x = $arr1[$y];

for($i=0;$i<$size;$i++)
{

if($x==$arr2[$i])
{
$y = $y+1;
$x = $arr1[$y];
}
else
{
$arr3[] =$arr2[$i];
}
}
echo var_dump($arr3);
追问
谢谢 大神. 因为有好几个人都给出了可行了答案, 我只能给分答案最好的那个了. 谢谢大神
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式