php过滤数组相同数据 php 数组过滤

php如何删除两个数组中相同的元素首先 , 我看到这个问题中描述是“如何删除两个数组中相同的元素”,虽然那个人写了一大堆,竟然用的是array_unique() , 从分析到给出的demo一直在解决如何删除“一个”数组中“重复”的元素 。汗!答非所问的答案竟然会被采纳 。
这里 , 简单分析一下提问者的真实意图 , 分以下2种情况:
1.现在有2个一维数组, $arr1和$arr2,现在要删除 $arr1 中存在于 $arr2 的元素 。
解决方案:使用array_diff对比返回在 array1 中但是不在 array2 及任何其它参数数组中的值,代码如下:
?php
$arr1 = array(1, 2, 3, 4);
$arr2 = array(2, 4);
//这一句即可
$arr1 = array_diff($arr1,$arr2);
var_dump($arr1);
2.先声明一下,我看了lt318025大神给出的答案,他的思维非常活跃 , 已经分了2种情况 。
现在有2个一维数组,$a和$b , 即删除$a中存在于$b的元素,删除$b中$a存在的元素,组后合并返回 。
可是lt318025大神用的PHP版本太高 , 给出的demo在低版本PHP下运行失败 , 这里修正一下:
?php
$a=array(1,2,3);
$b=array(2,3,4);
//得到存在于$a但不存在于$b中的元素组成的数组
$c=array_diff($a,$b);
//这里简单求出在$a但不在$b中的元素
var_dump($c);
//得到存在于$a但不存在于$b中的元素组成的数组与存在于$b但不存在于$a中的元素组成的数组的并集
$d=array_merge(array_diff($a,$b),array_diff($b,$a));
//这里彻底剔除了同时存在于$a和$b中的元素
var_dump($d);
究竟是哪一种情况,这需要看提问者的需求了 。
php数组怎么去除重复的数组值array_unique() 函数定义和用法
移除数组中的重复的值 , 并返回结果数组 。
当几个数组元素的值相等时 , 只保留第一个元素,其他的元素被删除 。
返回的数组中键名不变 。
例子
?php
$a=array("a"="Cat","b"="Dog","c"="Cat");
print_r(array_unique($a));
?
输出:Array ( [a] = Cat [b] = Dog )
过滤掉PHP数组中的重复值的实现代码复制代码
代码如下:
?php
$arrF
=
array();
$arrS
=
array();
$intTotal
=
100;
$intRand
=
10;
for($i=0;
$i
$intTotal;
$i)
{
$arrF[]
=
rand(1,
$intRand);
$arrS[]
=
rand(1,
$intRand);
}
$arrT
=
array_merge($arrF,
$arrS);
$arrRF
=
array();
$intStart
=
time();
foreach($arrT
as
$v)
{
if(in_array($v,
$arrRF))
{
continue;
}
else
{
$arrRF[]
=
$v;
}
}
$intEnd
=
time();
$intTime
=
$intEnd-$intStart;
echo
"With
Continue,Spend
time:$intTimebr/";
$intStart1
=
time();
$arrRS
=
array_unique($arrT);
$intEnd2
=
time();
$intTime2
=
$intEnd2-$intStart1;
echo
"With
array_unique
function,Spend
time:($intTime2)";
echo
"pre";
print_r($arrT);
print_r($arrRF);
print_r($arrRS);
echo
"/pre";
?
在$intTotal比较小的情况下,比如说1000以内,$intRand的取值基本不影响结果 , 两者执行的时间都差不多 。
测试$intTotal
大于10000时,$intRand取值100时,使用array_unique的效率要高于foreach循环判断 , $intRand=10,两者执行时间一致 。
因此,可以得出结论,当数组容量不大 , 大概在1000以内时,使用两者的执行效率差不多 。
当数组容量比较大时(具体应该到什么值,我没有详细测试,感兴趣的可以确定一下这个值),随着$intRand的逐渐增大,array_unique的表现更好,我不使用$intTotal/$intRand这个比值,是因为,感觉并不是成比例变化,但是基本会遵循比值越大 , array_unique表现越好 。
综上所述,在过滤数组重复值的时候,建议使用array_unuique,数组不大的时候两者效率等同,而array_unique使用当然让你的代码一下子减了好几行,数组容量过大时,函数的表现更好,为什么不用呢?
php如何过滤数组重复值?。?/h2>先用explode()函数分解成数组php过滤数组相同数据 , 然后用array_unique() 函数给数组去重复php过滤数组相同数据,然后用implode()合并成字符串
?php
$str='1|2|1|5|4|2';
$a=explode('|',$str);
$b=array_unique($a);
$c=implode('|',$b);
var_dump($c);
?
php数组去除重复的值?php
$array = array(
array(
'id' = 19,
'title' = '总统套房'
),
array(
'id' = 20,
'title' = '豪华套房'
),
array(
'id' = 21,
'title' = '豪华套房'
),
array(
'id' = 22,
'title' = '总统套房'
),
);
foreach ($array as $key = $value) {
foreach ($value as $k = $v) {
if ($k == 'title') {
$new_arr[] = $v;
}
}
}
$arr = array_unique($new_arr);
echo implode(' , ', $arr);
?
望采纳 Thx
php 去掉完全相同的重复数组一、这个没有被合并,只是取的后面这个键名的值,
二、$input=array("11"="aaaa","22"="bbbb","33"="cccc","11"="aaada","44"="cccc1","55"="cccc");
$result
=
array_unique
($input);
print_r($result);
输出的结果:Array
(
[11]
=
aaada
[22]
=
bbbb
[33]
=
cccc
[44]
=
cccc1
)
键名33

55
的值完全一样的时候,后者会被干掉
如果你要的是键名和值完全一致的时候才删除一个的话,似乎不能 , 因为键名是不允许重复的
听你的情况似乎数据量很大,建议你使用
array_flip()函数
【php中 , 删除数组中重复元素有一个可用的函数,那就是array_unique(),
但是它并不是一个最高效的方法,使用array_flip()函数将比array_uniqure()在速度上高出五倍左右 。】
例子:$input=array("11"="aaaa","22"="bbbb","33"="cccc","11"="aaada","44"="cccc1","55"="cccc");
$arr1
=
array_flip(array_flip($input));
print_r($arr1);
输出的结果:Array
(
[11]
=
aaada
[22]
=
bbbb
[55]
=
cccc
[44]
=
cccc1
)
【php过滤数组相同数据 php 数组过滤】php过滤数组相同数据的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于php 数组过滤、php过滤数组相同数据的信息别忘了在本站进行查找喔 。

    推荐阅读