PHP数组唯一函数array_unique对二维数组的处理
2013-01-06 00:00
821 查看
PHP唯一数组函数array_unique的官方功能说明,移除数组中的重复的值,并返回结果数组,当几个数组元素的值相等时,只保留第一个元素,其他的元素被删除。返回的数组中键名不变。array_unique() 先将值作为字符串排序,然后对每个值只保留第一个遇到的键名,接着忽略所有后面的键名。这并不意味着在未排序的 array 中同一个值的第一个出现的键名会被保留。
很显然,array_unique官方解释是针对一维数组的,但是很多情况下,我们要对二维数组进行去重复的操作,就想当然的也使用了array_unique函数,但却只返回了二维数组中的第一个数组,很明显二维数组不能用array_unique函数去重复,那么该怎么办呢?
把二维数组降成一维数组
1、把二维数组降维,二维数组变一维数组。
2、用array_unique唯一数组函数对降维后的数组去重复处理。
3、把去重复后的一维数组,恢复成二维数组,同时保留原二维数组中一维数组的键名。
有了解决问题的思路,下面就看具体的解决办法,如下一个二维数组:
至此二维数组的去重复问题得以解决,至于这个函数的效率没去测试,不过也就是2个2层的foreach循环,对于长度很小的二维数组来说,肯定不在话下,诸位如有疑问,请留言讨论。
由 PHP乐知博客 提供 http://tech.42xiu.com
很显然,array_unique官方解释是针对一维数组的,但是很多情况下,我们要对二维数组进行去重复的操作,就想当然的也使用了array_unique函数,但却只返回了二维数组中的第一个数组,很明显二维数组不能用array_unique函数去重复,那么该怎么办呢?
把二维数组降成一维数组
1、把二维数组降维,二维数组变一维数组。
2、用array_unique唯一数组函数对降维后的数组去重复处理。
3、把去重复后的一维数组,恢复成二维数组,同时保留原二维数组中一维数组的键名。
有了解决问题的思路,下面就看具体的解决办法,如下一个二维数组:
//内容是大家熟悉的“元芳” array( array('id'=>1, 'title'=>'元芳', 'score'=>10), array('id'=>2, 'title'=>'元芳,你怎么看', 'score'=>10), array('id'=>3, 'title'=>'大人说:元芳,你怎么看', 'score'=>9), array('id'=>1, 'title'=>'元芳', 'score'=>10), );下面是二维数组去重复的函数代码:
function unique($data = array()){ $tmp = array(); foreach($data as $key => $value){ //把一维数组键值与键名组合 foreach($value as $key1 => $value1){ $value[$key1] = $key1 . '_|_' . $value1;//_|_分隔符复杂点以免冲突 } $tmp[$key] = implode(',|,', $value);//,|,分隔符复杂点以免冲突 } //对降维后的数组去重复处理 $tmp = array_unique($tmp); //重组二维数组 $newArr = array(); foreach($tmp as $k => $tmp_v){ $tmp_v2 = explode(',|,', $tmp_v); foreach($tmp_v2 as $k2 => $v2){ $v2 = explode('_|_', $v2); $tmp_v3[$v2[0]] = $v2[1]; } $newArr[$k] = $tmp_v3; } return $newArr; } $data = array( array('id'=>1, 'title'=>'元芳', 'score'=>10), array('id'=>2, 'title'=>'元芳,你怎么看', 'score'=>10), array('id'=>3, 'title'=>'大人说:元芳,你怎么看', 'score'=>9), array('id'=>1, 'title'=>'元芳', 'score'=>10), ); $newArr = unique($data); //去重复后的二维数组 Array ( [0] => Array ( [id] => 1 [title] => 元芳 [score] => 10 ) [1] => Array ( [id] => 2 [title] => 元芳,你怎么看 [score] => 10 ) [2] => Array ( [id] => 3 [title] => 大人说:元芳,你怎么看 [score] => 9 ) )
至此二维数组的去重复问题得以解决,至于这个函数的效率没去测试,不过也就是2个2层的foreach循环,对于长度很小的二维数组来说,肯定不在话下,诸位如有疑问,请留言讨论。
由 PHP乐知博客 提供 http://tech.42xiu.com
相关文章推荐
- PHP数组唯一函数array_unique对二维数组的处理
- PHP数组唯一函数array_unique对二维数组的处理
- jQuery数组($.each,$.grep,$.map,$.merge,$.inArray,$.unique,$.makeArray)处理函数详解
- PHP学习笔记——使用回调函数处理数组的函数array_filter()
- jQuery数组($.each,$.grep,$.map,$.merge,$.inArray,$.unique,$.makeArray)处理函数详解
- jQuery数组($.each,$.grep,$.map,$.merge,$.inArray,$.unique,$.makeArray)处理函数详解
- PHP学习笔记——使用回调函数处理数组的函数array_walk()
- php数组函数序列之array_unique() - 去除数组中重复的元素值
- PHP数组处理函数的使用array_reduce(二)
- php-Arrays 函数-array_unique-移除数组中重复的值
- PHP数组处理函数的使用array_map(三)
- php数组函数序列之array_unique() - 去除数组中重复的元素值
- jQuery数组($.each,$.grep,$.map,$.merge,$.inArray,$.unique,$.makeArray)处理函数详解
- Query数组($.each,$.grep,$.map,$.merge,$.inArray,$.unique,$.makeArray)处理函数详解
- php数组函数序列之array_unique() - 去除数组中重复的元素值
- PHP学习笔记——使用回调函数处理数组函数array_map()
- php中几个数组函数array_slice() array_filter array_unique() in_array()
- PHP的array_diff()函数在处理大数组时的效率问题
- 原:PHP数组函数研究:is_null,is_object,is_array,is_string,is_resource等