php去除重复数组
1. php数组比对删除重复
这个算法比较好理解并且算法复杂度和内存消耗可控
最终结果数组是下标从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);
2. php数组去除重复的值
之前写了一篇关于数组去重的文章,但是仅限于一维数组。下面的函数可以用于二维数组:
//二维数组去掉重复值
function array_unique_fb($array2D){foreach ($array2D as $v){$v = join(",",$v); //降维,也可以用implode,将一维数组转换为用逗号连接的字符串
$temp[] = $v;}
$temp = array_unique($temp); //去掉重复的字符串,也就是重复的一维数组
foreach ($temp as $k => $v){$temp[$k] = explode(",",$v); //再将拆开的数组重新组装}return $temp;}
如果你想保留数组的键值,可以用下面的函数:
//二维数组去掉重复值 并保留键值
function array_unique_fb($array2D){foreach ($array2D as $k=>$v){$v = join(",",$v); //降维,也可以用implode,将一维数组转换为用逗号连接的字符串
$temp[$k] = $v;}$temp = array_unique($temp); //去掉重复的字符串,也就是重复的一维数组
foreach ($temp as $k => $v){$array=explode(",",$v); //再将拆开的数组重新组装
$temp2[$k]["id"] =$array[0];
$temp2[$k]["litpic"] =$array[1];
$temp2[$k]["title"] =$array[2];
$temp2[$k]["address"] =$array[3];
$temp2[$k]["starttime"] =$array[4];
$temp2[$k]["endtime"] =$array[5];
$temp2[$k]["classid"] =$array[6];
大概就这样啦。
以上回答你满意么?
3. 移除数组中重复的值
array_unique
(PHP 4 >= 4.0.1, PHP 5, PHP 7)
array_unique — 移除数组中重复的值
说明
array_unique ( array $array [, int $sort_flags = SORT_STRING ] ) : array
array_unique() 接受 array 作为输入并返回没有重复值的新数组。
注意键名保留不变。array_unique() 先将值作为字符串排序,然后对每个值只保留第一个遇到的键名,接着忽略所有后面的键名。这并不意味着在未排序的 array 中同一个值的第一个出现的键名会被保留。
注意: 当且仅当 (string) $elem1 === (string) $elem2 时两个单元被认为相同。 例如,字符串表达一样时,会使用首个元素。
参数
array
输入的数组。
sort_flags
第二个可选参数sort_flags 可用于修改排序行为:
排序类型标记:
SORT_REGULAR - 按照通常方法比较(不修改类型)
SORT_NUMERIC - 按照数字形式比较
SORT_STRING - 按照字符串形式比较
SORT_LOCALE_STRING - 根据当前的本地化设置,按照字符串比较。
返回值
返回过滤后的数组。
更新日志
版本 说明
5.2.10 修改回 sort_flags 的默认值为 SORT_STRING。
5.2.9 增加可选选项sort_flags,默认值 SORT_REGULAR。 5.2.9 之前,此函数内部使用 SORT_STRING 排序。
范例
示例 #1 array_unique() 例子
"green", "red", "b" => "green", "blue", "red");
$result = array_unique($input);
print_r($result);
?>
4. php如何去掉二维数组中重复的元素
PHP数组去除重复项有个内置函数array_unique(),但是php的array_unique函数只适用于一维数组,对多维数组并不适用,不过你可以在二维数组中的值,用array_unique()即可。
比如:
$array = array(array(1,1,2),array(2,3,4,3));
$temp_array = array();
foreach($array as $key=>$value){
$temp_array[$key] = array_unique($value);
}
$array = $temp_array;
5. php如何删除两个数组中相同的元素
php如何去除数组中相同的元素
如何去除数组中相同的元素?在php手册中有这样写
array_unique(PHP
4
>=
4.0.1)
array_unique
--
移除数组中重复的值
说明
array
array_unique
(
array
array)
array_unique()
接受
array
作为输入并返回没有重复值的新数组。
注意键名保留不变。array_unique()
先将值作为字符串排序,然后对每个值只保留第一个遇到的键名,接着忽略所有后面的键名。这并不意味着在未排序的
array
中同一个值的第一个出现的键名会被保留。
注:
当且仅当
(string)
$elem1
===
(string)
$elem2
时两个单元被认为相同。就是说,当字符串的表达一样时。
第一个单元将被保留。
例子
1.
array_unique()
例子
?php
$input
=
array
("a"
=
"green",
"red",
"b"
=>
"green",
"blue",
"red");
$result
=
array_unique
($input);
print_r($result);
?>
6. php二维数组去重
方法一:
//二维数组去掉重复值function array_unique_fb($array2D){ foreach ($array2D as $v){ $v=join(',',$v); //降维,也可以用implode,将一维数组转换为用逗号连接的字符串 $temp[]=$v; } $temp=array_unique($temp); //去掉重复的字符串,也就是重复的一维数组 foreach ($temp as $k => $v){ $temp[$k]=explode(',',$v); //再将拆开的数组重新组装 } return $temp;}
方法二:
//二维数组去掉重复值,并保留键值function array_unique_fb($array2D){ foreach ($array2D as $k=>$v){ $v=join(',',$v); //降维,也可以用implode,将一维数组转换为用逗号连接的字符串 $temp[$k]=$v; } $temp=array_unique($temp); //去掉重复的字符串,也就是重复的一维数组 foreach ($temp as $k => $v){ $array=explode(',',$v); //再将拆开的数组重新组装 //下面的索引根据自己的情况进行修改即可 $temp2[$k]['id'] =$array[0]; $temp2[$k]['title'] =$array[1]; $temp2[$k]['keywords'] =$array[2]; $temp2[$k]['content'] =$array[3]; } return $temp2;}
7. php 如何去除多维数组指定重复出现的值
array_unique
()
函数用于移除数组中重复的值。如果两个或更多个数组值相同,只保留第一个值,其他的值被移除。
注意:被保留的数组将保持第一个数组项的键名类型
8. 如何正确实现PHP删除数组重复元素
array_unique
(PHP 4 >= 4.0.1, PHP 5, PHP 7)
array_unique — 移除数组中重复的值
说明
array array_unique ( array $array [, int $sort_flags = SORT_STRING ] )
array_unique() 接受 array 作为输入并返回没有重复值的新数组。
注意键名保留不变。array_unique() 先将值作为字符串排序,然后对每个值只保留第一个遇到的键名,接着忽略所有后面的键名。这并不意味着在未排序的 array 中同一个值的第一个出现的键名会被保留。
Note: 当且仅当 (string) $elem1 === (string) $elem2 时两个单元被认为相同。就是说,当字符串的表达一样时。 第一个单元将被保留。
参数
array
输入的数组。
sort_flags
The optional second parameter sort_flags may be used to modify the sorting behavior using these values:
Sorting type flags:
SORT_REGULAR - compare items normally (don't change types)
SORT_NUMERIC - compare items numerically
SORT_STRING - compare items as strings
SORT_LOCALE_STRING - compare items as strings, based on the current locale.
返回值
Returns the filtered array.
更新日志
版本
说明
5.2.10 Changed the default value of sort_flags back to SORT_STRING.
5.2.9 Added the optional sort_flags defaulting to SORT_REGULAR. Prior to 5.2.9, this function used to sort the array with SORT_STRING internally.
范例
Example #1 array_unique() 例子
<?php
$input = array("a" => "green", "red", "b" => "green", "blue", "red");
$result = array_unique($input);
print_r($result);
?>
以上例程会输出:
Array
(
[a] => green
[0] => red
[1] => blue
)
Example #2 array_unique() 和类型
<?php
$input = array(4, "4", "3", 4, 3, "3");
$result = array_unique($input);
var_mp($result);
?>
以上例程会输出:
array(2) {
[0] => int(4)
[2] => string(1) "3"
}
参见
array_count_values() - 统计数组中所有的值出现的次数
注释
Note: Note that array_unique() is not intended to work on multi dimensional arrays.
9. PHP 不重复显示数组里的值
array_unique函数可以去除重复,例如你的语句可以修改为:
$arr=array_unique(array(1,1,2,1,5,9,9,6,7,8,8));
exit(json_encode($arr));
10. 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_mp($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_mp($c);
//得到存在于$a但不存在于$b中的元素组成的数组与存在于$b但不存在于$a中的元素组成的数组的并集
$d=array_merge(array_diff($a,$b),array_diff($b,$a));
//这里彻底剔除了同时存在于$a和$b中的元素
var_mp($d);
究竟是哪一种情况,这需要看提问者的需求了。