php删除数组中重复元素的方法


Posted in PHP onDecember 22, 2015

几种php删除数组元素方法在很多情况下我们的数组会出现重复情况,那我们删除数组中一些重复的内容怎么办,这些元素必须保持他唯一,所以就想办法来删除它们,下面利用了遍历查询来删除重复数组元素的几种方法。
方法一、完整删除重复数组实例-----删除数组中的一个元素

function array_remove_value(&$arr, $var){
foreach ($arr as $key => $value) {
if (is_array($value)) {
array_remove_value($arr[$key], $var);
} else {
$value = trim($value);
if ($value == $var) {
unset($arr[$key]);
} else {
$arr[$key] = $value;
}
}
}
}

$a是一个数组:

count($a); //得到4
unset($a[1]); //删除第二个元素
count($a); //得到3
echo $a[2]; //数组中仅有三个元素,本想得到最后一个元素,但却得到blue,
echo $a[1]; //无值
?>

也就是说在删除数组中的元素后,数组中的元素个数(用count()得到)变了,但数组下标却没有重新排列,还必须用删除数组前的key来操作相应的值。
后来我采用另一种方法,其实根本就不叫"方法",是用php4现成的函数array_splice()

count ($a); //得到4
array_splice($a,1,1); //删除第二个元素
count ($a); //得到3
echo $a[2]; //得到yellow
echo $a[1]; //得到blue
?>

方法二、删除数组中重复元素的函数

function delmember(&$array, $id)
{
$size = count($array);
for($i = 0; $i <$size - $id - 1; $i ++)
{
$array[$id + $i] = $array[$id + $i + 1];
}
unset($array[$size - 1]);
}

补充小例子:

方法一、php有内置函数array_unique可以用来删除数组中的重复值

  • array_unique -- 移除数组中重复的值
  • array_unique说明
  • array array_unique ( array array )
  • array_unique() 接受 array 作为输入并返回没有重复值的新数组

注意键名保留不变。array_unique() 先将值作为字符串排序,然后对每个值只保留第一个遇到的键名,接着忽略所有后面的键名。这并不意味着在未排序的 array 中同一个值的第一个出现的键名会被保留。
注: 当且仅当 (string) $elem1 === (string) $elem2 时两个单元被认为相同。就是说,当字符串的表达一样时。
第一个单元将被保留。
例子: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
)

方法二、array_flip实现去重效果

另一个方法是使用php的array_flip函数来间接的实现去重效果
array_flip是反转数组键和值的函数,它有个特性就是如果数组中有二个值是一样的,那么反转后会保留最后一个键和值,利用这个特性我们用他来间接的实现数组的去重.

<?php
$arr = array("a"=>"a1","b"=>'b1',"c"=>"a2","d"=>"a1");
$arr1 = array_flip($arr);
print_r($arr1);//先反转一次,去掉重复值,输出Array ( [a1] => d [b1] => b [a2] => c )
$arr2 = array_flip($arr);
print_r($arr2);//再反转回来,得到去重后的数组,输出Array ( [a1] => d [b1] => b [a2] => c )
$arr3 = array_unique($arr);
print_r($arr3);//利用php的array_unique函数去重,输出Array ( [a] => a1 [b] => b1 [c] => a2 )
?>

二种方法不同的是用array_flip得到的是重复元素最后的键和值,用array_unique得到的是二个重复元素第一个键和值。

希望本文所述对大家学习php程序设计有所帮助,解决数组重复元素问题。

PHP 相关文章推荐
PHP安全编程之加密功能
Oct 09 PHP
PHP与MySQL交互使用详解
Oct 09 PHP
判断是否为指定长度内字符串的php函数
Feb 16 PHP
用PHP读取和编写XML DOM的实现代码
Feb 03 PHP
用PHP写的基于Memcache的Queue实现代码
Nov 27 PHP
PHP类与对象中的private访问控制的疑问
Nov 01 PHP
Php output buffering缓存及程序缓存深入解析
Jul 15 PHP
php实例分享之html转为rtf格式
Jun 02 PHP
php实现utf-8转unicode函数分享
Jan 06 PHP
[原创]ThinkPHP中SHOW_RUN_TIME不能正常显示运行时间的解决方法
Oct 10 PHP
PHP Yii框架之表单验证规则大全
Nov 16 PHP
PHP如何实现订单的延时处理详解
Dec 30 PHP
yii2.0实现验证用户名与邮箱功能
Dec 22 #PHP
PHP内核探索之解释器的执行过程
Dec 22 #PHP
PHP内核探索之变量
Dec 22 #PHP
yii2.0使用Plupload实现带缩放功能的多图上传
Dec 22 #PHP
PHP输入流php://input实例讲解
Dec 22 #PHP
服务器迁移php版本不同可能诱发的问题
Dec 22 #PHP
php上传图片并压缩的实现方法
Dec 22 #PHP
You might like
phpMyAdmin下载、安装和使用入门教程
2007/05/31 PHP
php通过ajax实现双击table修改内容
2014/04/28 PHP
PHP 二维array转换json的实例讲解
2018/08/21 PHP
Javascript 获取滚动条位置等信息的函数
2009/09/08 Javascript
jquery1.4 教程二 ajax方法的改进
2010/02/25 Javascript
Javascript 判断Flash是否加载完成的代码
2010/04/12 Javascript
基于Jquery的将DropDownlist的选中值赋给label的实现代码
2011/05/06 Javascript
解决js正则匹配换行问题实现代码
2012/12/10 Javascript
可在线编辑网页文字效果代码(单击)
2013/03/02 Javascript
jQuery方法简洁实现隔行换色及toggleClass的使用
2013/03/15 Javascript
jQuery判断checkbox是否选中的小例子
2013/12/02 Javascript
angularJS 入门基础
2015/02/09 Javascript
JS实现网页上随滚动条滚动的层效果代码
2015/11/04 Javascript
原生JS实现幻灯片
2017/02/22 Javascript
基于JavaScript实现的希尔排序算法分析
2017/04/14 Javascript
AngularJS获取json数据的方法详解
2017/05/27 Javascript
用JS实现简单的登录验证功能
2017/07/28 Javascript
JS实现利用两个队列表示一个栈的方法
2017/12/13 Javascript
详解PHP后期静态绑定分析与应用
2018/03/21 Javascript
Angular中的ng-template及angular 使用ngTemplateOutlet 指令的方法
2018/08/08 Javascript
JS中DOM元素的attribute与property属性示例详解
2018/09/04 Javascript
mapboxgl区划标签避让不遮盖实现的代码详解
2020/07/01 Javascript
[38:51]2014 DOTA2国际邀请赛中国区预选赛 Orenda VS LGD-CDEC
2014/05/22 DOTA
[02:27]《DAC最前线》之附加赛征程
2015/01/29 DOTA
[02:00]最后,我终于出了辉耀
2018/03/27 DOTA
[58:21]DOTA2亚洲邀请赛 4.3 突围赛 Liquid vs VGJ.T 第二场
2018/04/04 DOTA
Python fileinput模块使用实例
2015/05/28 Python
python提取字典key列表的方法
2015/07/11 Python
Python编程实现双链表,栈,队列及二叉树的方法示例
2017/11/01 Python
python利用有道翻译实现&quot;语言翻译器&quot;的功能实例
2017/11/14 Python
python多进程提取处理大量文本的关键词方法
2018/06/05 Python
解决django前后端分离csrf验证的问题
2019/02/03 Python
Structs界面控制层技术
2013/10/11 面试题
社区八一活动方案
2014/02/03 职场文书
《静夜思》教学反思
2016/02/17 职场文书
Golang 编译成DLL文件的操作
2021/05/06 Golang