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 相关文章推荐
Discuz板块横排显示图片的实现方法
May 28 PHP
PHP数组的交集array_intersect(),array_intersect_assoc(),array_inter_key()函数的小问题
May 29 PHP
PHP中PDO基础教程 入门级
Sep 04 PHP
探讨file_get_contents与curl效率及稳定性的分析
Jun 06 PHP
ThinkPHP使用心得分享-分页类Page的用法
May 15 PHP
php中使用Ajax时出现Error(c00ce56e)的详细解决方案
Nov 03 PHP
PHP循环遍历数组的3种方法list()、each()和while总结
Nov 19 PHP
php中使用session防止用户非法登录后台的方法
Jan 27 PHP
php实现图片等比例缩放代码
Jul 23 PHP
提高php编程效率技巧
Aug 13 PHP
yii2.0使用Plupload实现带缩放功能的多图上传
Dec 22 PHP
Yii框架参数化查询中IN查询只能查询一个的解决方法
May 20 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实现webservice实例
2014/11/06 PHP
Zend Framework教程之Zend_Db_Table_Row用法实例分析
2016/03/21 PHP
php自定义函数br2nl实现将html中br换行符转换为文本输入中换行符的方法【与函数nl2br功能相反】
2017/02/17 PHP
apache集成php7.3.5的详细步骤
2019/06/20 PHP
javascript之typeof、instanceof操作符使用探讨
2013/05/19 Javascript
解析Jquery取得iframe中元素的几种方法
2013/07/04 Javascript
js简单的表格添加行和删除行操作示例
2014/03/31 Javascript
js控制输入框获得和失去焦点时状态显示的方法
2015/01/30 Javascript
原生js和jquery实现图片轮播特效
2015/04/23 Javascript
js实现刷新iframe的方法汇总
2015/04/27 Javascript
微信小程序实现添加手机联系人功能示例
2017/11/30 Javascript
Node.js Express安装与使用教程
2018/05/11 Javascript
Vue框架里使用Swiper的方法示例
2018/09/20 Javascript
JavaScript this绑定过程深入详解
2018/12/07 Javascript
vue动态注册组件实例代码详解
2019/05/30 Javascript
javascript(基于jQuery)实现鼠标获取选中的文字示例【测试可用】
2019/10/26 jQuery
JS数组的高级使用方法示例小结
2020/03/14 Javascript
JavaScript 生成唯一ID的几种方式
2021/02/19 Javascript
python通过装饰器检查函数参数数据类型的方法
2015/03/13 Python
Python设计模式之观察者模式简单示例
2018/01/10 Python
pygame实现非图片按钮效果
2019/10/29 Python
Python 实现OpenCV格式和PIL.Image格式互转
2020/01/09 Python
Python Unittest原理及基本使用方法
2020/11/06 Python
纯CSS实现设置半个字符的样式
2014/07/03 HTML / CSS
莫斯科隐形眼镜网上商店:Linzi
2019/07/22 全球购物
澳大利亚Rockwear官网:女子瑜伽、健身和运动服
2021/01/26 全球购物
shell程序如何生命变量?shell变量是弱变量吗?
2014/11/10 面试题
生产车间实习自我鉴定
2013/09/23 职场文书
国际贸易专业个人求职信格式
2014/02/02 职场文书
安全协议书范本
2014/04/21 职场文书
我有一个梦想演讲稿
2014/05/05 职场文书
5s标语大全
2014/06/23 职场文书
确保工程质量承诺书
2015/04/29 职场文书
心灵捕手观后感
2015/06/02 职场文书
法律讲堂观后感
2015/06/11 职场文书
正则表达式基础与常用验证表达式
2022/06/16 Javascript