日期:2014-05-17 浏览次数:20588 次
<?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") );*/
<?php /** * 从数组中删除空白的元素(包括只有空白字符的元素) * * @param array $arr * @param boolean $trim */ function array_remove_empty(& $arr, $trim = true) { foreach ($arr as $key => $value) { if (is_array($value)) { array_remove_empty($arr[$key]); } else { $value = trim($value); if ($value == '') { unset($arr[$key]); } elseif ($trim) { $arr[$key] = $value; } } } } /** * 从一个二维数组中返回指定键的所有值 * * @param array $arr * @param string $col * * @return array */ function array_col_values(& $arr, $col) { $ret = array(); foreach ($arr as $row) { if (isset($row[$col])) { $ret[] = $row[$col]; } } return $ret; } /** * 将一个二维数组转换为 hashmap * * 如果省略 $valueField 参数,则转换结果每一项为包含该项所有数据的数组。 * * @param array $arr * @param string $keyField * @param string $valueField * * @return array */ function array_to_hashmap(& $arr, $keyField, $valueField = null) { $ret = array(); if ($valueField) { foreach ($arr as $row) { $ret[$row[$keyField]] = $row[$valueField]; } } else { foreach ($arr as $row) { $ret[$row[$keyField]] = $row; } } return $ret; } /** * 将一个二维数组按照指定字段的值分组 * * @param arra