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);
这个要怎么做到呢. 有大神吗, 简直跪了 展开
$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);
这个要怎么做到呢. 有大神吗, 简直跪了 展开
5个回答
展开全部
这个算法比较好理解并且算法复杂度和内存消耗可控
最终结果数组是下标从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);
追问
谢谢 大神. 因为有好几个人都给出了可行了答案, 我只能给分答案最好的那个了. 谢谢大神
展开全部
相比之下, 我的方法更简便一些, 代码量也少.
$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);
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
$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
)
追问
谢谢 大神. 因为有好几个人都给出了可行了答案, 我只能给分答案最好的那个了. 谢谢大神
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
<?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);
$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)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
$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);
$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);
追问
谢谢 大神. 因为有好几个人都给出了可行了答案, 我只能给分答案最好的那个了. 谢谢大神
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询