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 相关文章推荐
第七节 类的静态成员 [7]
Oct 09 PHP
收集的DedeCMS一些使用经验
Mar 17 PHP
PHP实现手机归属地查询API接口实现代码
Aug 27 PHP
PHP 正则表达式常用函数
Aug 17 PHP
php中explode函数用法分析
Nov 15 PHP
Laravel使用Caching缓存数据减轻数据库查询压力的方法
Mar 15 PHP
Symfony2学习笔记之控制器用法详解
Mar 17 PHP
PHP截取发动短信内容的方法
Jul 04 PHP
PHP SPL 被遗落的宝石【SPL应用浅析】
Apr 20 PHP
针对thinkPHP5框架存储过程bug重写的存储过程扩展类完整实例
Jun 16 PHP
php抽象方法和普通方法的区别点总结
Oct 13 PHP
2020最新版 PhpStudy V8.1版本下载安装使用详解
Oct 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
php实现高效获取图片尺寸的方法
2014/12/12 PHP
浅谈PDO的rowCount函数
2015/06/18 PHP
php字符串的替换,分割和连接方法
2016/05/23 PHP
PHP自定义图片缩放函数实现等比例不失真缩放的方法
2016/08/19 PHP
Mac下关于PHP环境和扩展的安装详解
2019/10/17 PHP
JavaScript窗口功能指南之在窗口中书写内容
2006/07/21 Javascript
javascript Keycode对照表
2009/10/24 Javascript
同域jQuery(跨)iframe操作DOM(示例代码)
2013/12/13 Javascript
js中函数调用的两种常用方法使用介绍
2014/07/17 Javascript
JavaScript设计模式之外观模式介绍
2014/12/28 Javascript
javascript实现全角半角检测的方法
2015/07/23 Javascript
JS基于Ajax实现的网页Loading效果代码
2015/10/27 Javascript
jquery使用FormData实现异步上传文件
2018/10/25 jQuery
JS实现电话号码的字母组合算法示例
2019/02/26 Javascript
javascript将16进制的字符串转换为10进制整数hex
2020/03/05 Javascript
如何在JS文件中获取Vue组件
2020/09/16 Javascript
Python编程之序列操作实例详解
2017/07/22 Python
详解使用 pyenv 管理多个版本 python 环境
2017/10/19 Python
python中kmeans聚类实现代码
2018/02/23 Python
python列表使用实现名字管理系统
2019/01/30 Python
python 获得任意路径下的文件及其根目录的方法
2019/02/16 Python
如何通过python实现人脸识别验证
2020/01/17 Python
python实现微信打飞机游戏
2020/03/24 Python
CSS3实现银灰色动画效果的导航菜单代码
2015/09/01 HTML / CSS
SmartBuyGlasses美国官网:太阳眼镜和眼镜
2017/08/20 全球购物
西班牙在线光学:Visual-Click
2020/06/22 全球购物
关于.NET, HTML的五个问题
2012/08/29 面试题
标记环网Toke Ring IEEE802.5
2014/05/26 面试题
大学同学十年聚会感言
2014/02/21 职场文书
党的群众路线教育实践活动个人对照检查材料(校长)
2014/11/05 职场文书
党校个人总结
2015/03/04 职场文书
2015年党支部书记工作总结
2015/05/21 职场文书
婚庆司仪开场白
2015/05/29 职场文书
小王子读书笔记
2015/06/29 职场文书
2016入党积极分子党课学习心得体会
2015/10/09 职场文书
Redis集群新增、删除节点以及动态增加内存的方法
2021/09/04 Redis