php对二维数组进行相关操作(排序、转换、去空白等) |
技巧提示: array_keys($array) //返回所有键名 array_values($array) //返回所有键值 $result=array_reverse($input); //将数组颠倒,不保留键名 $result_keyed=array_reverse($input,true); //将数组颠倒,保留键名 array_keys($array,"blue"); //返回值为blue的键名 1. PHP二维数组去重复项函数 function unique_arr($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)); print_r($array2D); print_r(unique_arr($array2D,true)); 2. 二维数组的排序方法 function printr($arr) { echo <pre>; print_r($arr); echo </pre><br>; } 第一组 :sort 和 rsort ,按照PHP数组键值的顺序asc和逆序desc进行排序,同时破坏原来数组的索引关系——其实是删除索引之后重新建立从0开始的数字索引 。 $a = array(a=>1,2); sort($a); printr($a); rsort($a); printr($a); /*Array ( [0] => 1 [1] => 2 ) Array ( [0] => 2 [1] => 1 ) */ 第二组函数:asort 和 arsort ,这两个函数就比较厉害一点了,只要他们可以保留数组原有的索引关系,把上例的sort 和 rsort 分别用这两个函数替换一下 $a = array(a=>1,2); asort($a); printr($a); arsort($a); printr($a); /* Array ( [a] => 1 [0] => 2 ) Array ( [0] => 2 [a] => 1 ) */ 第三组PHP数组排序函数:krsort 和 ksort ,这两个不同于以上两组,这两函数是对键名进行排序的. $a = array(a=>1,2); ksort($a); printr($a); krsort($a); printr($a); /* Array ( [0] => 2 [a] => 1 ) Array ( [a] => 1 [0] => 2 ) */ 通过自定义函数对PHP数组进行排序,有三个函数分别是: /** * @package BugFree * @version $Id: FunctionsMain.inc.php,v 1.32 2005/09/24 11:38:37 wwccss Exp $ * * * Sort an two-dimension array by some level two items use array_multisort() function. * * sortArr($Array,"Key1","SORT_ASC","SORT_RETULAR","Key2"……) * @author Chunsheng Wang <wwccss@263.net> * @param array $ArrayData the array to sort. * @param string $KeyName1 the first item to sort by. * @param string $SortOrder1 the order to sort by("SORT_ASC"|"SORT_DESC") * @param string $SortType1 the sort type("SORT_REGULAR"|"SORT_NUMERIC"|"SORT_STRING") * @return array sorted array. */ function sortArr($ArrayData,$KeyName1,$SortOrder1 = "SORT_ASC",$SortType1 = "SORT_REGULAR") { if(!is_array($ArrayData)) return $ArrayData; // Get args number. $ArgCount = func_num_args(); // Get keys to sort by and put them to SortRule array. for($I = 1;$I < $ArgCount;$I ++) { $Arg = func_get_arg($I); if(!eregi("SORT",$Arg)) { $KeyNameList[] = $Arg; $SortRule[] = $.$Arg; } else $SortRule[] = $Arg; } // Get the values according to the keys and put them to array. foreach($ArrayData AS $Key => $Info) { foreach($KeyNameList AS $KeyName) ${$KeyName}[$Key] = strtolower($Info[$KeyName]); } // Create the eval string and eval it. $EvalString = array_multisort(.join(",",$SortRule).,$ArrayData);; eval ($EvalString); return $ArrayData; } 实例: //################# 示例 ################# $arr = array( array( name => 学习, size => 1235, type => jpe, time => 1921-11-13, class => dd, ), array( name => 中国功夫, size => 153, type => jpe, time => 2005-11-13, class => jj, ), array( name => 编程, size => 35, type => gif, time => 1997-11-13, class => dd, ), array( name => 中国功夫, size => 65, type => jpe, time => 1925-02-13, class => yy, ), array( name => 中国功夫, size => 5, type => icon, time => 1967-12-13, class => rr, ), ); echo <pre>; print_r($arr); echo <br>; //注意:按照数字方式排序时 153 比 65 小 $temp = sortArr($arr,"name","SORT_ASC","type","SORT_DESC","size","SORT_ASC","SORT_STRING"); print_r($temp); echo </pre>; 3. 多维数组转一维数组 function rebuild_array($arr){ //rebuild a array static $tmp=array(); for($i=0; $i<count($arr); $i++){ if(is_array($arr[$i])){ rebuild_array($arr[$i]); }else{ $tmp[]=$arr[$i]; } } return $tmp; } 实例: $arr=array(123.html,456.html,array(dw.html,fl.html,array(ps.html,fw.html)),ab.html); // 定义一个三维数组,用来检测我们的函数 echo <pre>; print_r(rebuild_array($arr)); echo </pre>; 4. 从数组中删除空白的元素 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; } } } } 实例: $a = array(array(3),2,,array(,23),0); array_remove_empty($a); printr($a); // printr 函数请在本文中找 5. 获取多维数组下特定键下的值,并生成一维数组 function getall_by_key(array $arr, $key){ if (!trim($key)) return false; preg_match_all("/\"$key\";\w{1}:(?:\d+:|)(.*?);/", serialize($arr), $output); return $output[1]; } $testArr = array(111=> 100, out=> 200, 333 => array(out => 310, array(321, 322, out => "this is a test"))); printr(getall_by_key($testArr, out)); 以上就是本文的全部内容,php对于二维数组的相应操作介绍的很详细,希望对大家的学习有所帮助 。 |