普通的一维数组去重其实php提供了专门的函数,叫array_unique函数,就像我之前说的所有方法都不只是一种,我们虽然知道这样可以去重,但是我们是否知道他去重的原理,其实,一维数组去重的原理很简单,就是先将其值和键对调,这样值就成为了键,重复的键会被覆盖,这样再对调回来,就实现了数组的去重,而二维数组的去重也是在这个基础上发展起来的,这里我总结了一些php其他的非常有用的去重函数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
<?php /** * 从array1数组去掉array2数组中已经有的元素【键和值都一样的元素】 * @param $array1 * @param $array2 */ function array_diff_assoc2_deep($array1, $array2) { $ret = array(); foreach ($array1 as $k => $v) { if (!isset($array2[$k])) $ret[$k] = $v; else if (is_array($v) && is_array($array2[$k])) $ret[$k] = array_diff_assoc2_deep($v, $array2[$k]); else if ($v !=$array2[$k]) $ret[$k] = $v; else { unset($array1[$k]); } } return $ret; } //第一种方法 $array1 = array('blue' => 6, 'red' => 2, 'green' => 3, 'purple' => 4); $array2 = array('green' => 5, 'blue' => 6, 'yellow' => 7, 'cyan' => 8); $rs = array_diff_assoc2_deep($array1,$array2); print_r($rs); //第二种方法 print_r(array_diff_assoc($array1,$array2)); //仅按值 print_r(array_diff($array1,$array2)); //仅按键 array_diff_key //二维数组去重 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; } |
本文链接:http://www.521php.com/archives/154/
程序本天成,妙手偶得之!我们只是代码的搬运工!
转载请注明:http://www.521php.com/archives/154/