PHP二维数组去重复项自定义函数
如果我们是一维数据去重复项就不要说了有直接的函数了,但二维数据php未提供函数了,下面小编来给大家推荐两个不错的二维数组去重复项自定义函数吧。
例1
<?php function unique_array_2d($array2D, $stkeep = false, $ndformat = true) { // 判断是否保留一级数组键 (一级数组键可以为非数字) if ($stkeep) $stArr = array_keys($array2D); // 判断是否保留二级数组键 (所有二级数组键必须相同) if ($ndformat) $ndArr = array_keys(end($array2D)); //降维,也可以用implode,将一维数组转换为用逗号连接的字符串 foreach ($array2D as $v) { $v = join(",", $v); $temp[] = $v; } //去掉重复的字符串,也就是重复的一维数组 $temp = array_unique($temp); //再将拆开的数组重新组装 foreach ($temp as $k => $v) { if ($stkeep) $k = $stArr[$k]; if ($ndformat) { $tempArr = explode(",", $v); foreach ($tempArr as $ndkey => $ndval) $output[$k][$ndArr[$ndkey]] = $ndval; } else $output[$k] = explode(",", $v); } return $output; } $array2D = array( 'first' => array( 'title' => '1111', 'date' => '2222' ) , 'second' => array( 'title' => '1111', 'date' => '2222' ) , 'third' => array( 'title' => '2222', 'date' => '3333' ) ); echo "<pre>"; print_r(unique_array_2d($array2D, true)); /** * 将二维数组通过指定的 key 去重 * * @param array $arr 要去重的数组 * @param array $by 指定key去重,该参数不指定将返回 array() * @return array */ function array_multunique($arr, $by = array()) { $temp = array(); foreach ($arr as $key => $val) { foreach ($by as $v) { $temp[$key].= isset($val[$v]) ? $val[$v] : ''; } } return array_intersect_key($arr, array_unique($temp)); } /*$aa = array ( array ('id' => 123, 'name' => '张三' ), array ('id' => 123, 'name' => '李四' ), array ('id' => 124, 'name' => '王五' ), array ('id' => 125, 'name' => '赵六' ), array ('id' => 126, 'name' => '赵六' ) ); $key = 'id'; array_multunique ($aa, array('id')); */ function array_remove_key($array, $keys) { if (!is_array($array) || !is_array($keys)) { return false; } foreach ($array as $t) { foreach ($keys as $k) { unset($t[$k]); } $doc[] = $t; } return $doc; } /*$array = array( '0' => array('a' => 'aaaaa', 'b' => 'bbbbb', 'c' => array('d' => 'ddddd', 'e' => 'eeeee')), '1' => array('a' => 'aaaaa', 'b' => 'bbbbb', 'c' => array('d' => 'ddddd', 'e' => 'eeeee')) ); print_r( array_remove_key($array,array('c')));*/ function array_remove_key_val(&$a, $b, $c) { foreach ($a as $key => $value) { if (isset($value[$b]) && ($value[$b] == $c)) { unset($a[$key]); } } } /*$a=array( array('id'=>1,'num'=>10,'type'=>'news'), array('id'=>2,'num'=>100,'type'=>'pic') ); print_r( array_remove_key_val($a,"id","1") );*/ ?>
例2
<?php //二维数组去掉重复值 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; } //二维数组去掉重复值 并保留键值 function array_unique_fb($array2D) { foreach ($array2D as $k => $v) { $v = join(",", $v); //降维,也可以用implode,将一维数组转换为用逗号连接的字符串 $temp[$k] = $v; } $temp = array_unique($temp); //去掉重复的字符串,也就是重复的一维数组 foreach ($temp as $k => $v) { $array = explode(",", $v); //再将拆开的数组重新组装 $temp2[$k]["id"] = $array[0]; $temp2[$k]["litpic"] = $array[1]; $temp2[$k]["title"] = $array[2]; $temp2[$k]["address"] = $array[3]; $temp2[$k]["starttime"] = $array[4]; $temp2[$k]["endtime"] = $array[5]; $temp2[$k]["classid"] = $array[6]; $temp2[$k]["ename"] = $array[7]; } return $temp2; } ?>
教程地址:http://www.phprm.com/code/53661.html
欢迎转载!但请带上文章地址^^