php处理二维数组(去除重复项,排序,转换,去空白等)

by 清泉 20. 八月 2010 11:02

1. PHP二维数组去重复项函数
PHP数组去除重复项 有个内置函数array_unique (),但是php的 array_unique函数只适用于一维数组,对多维数组并不适用,以下提供一个二维数组 的 array_unique函数
Php代码
//二维数组去掉重复值  
function unique_arr($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;  

2. 二维数组的排序方法
一维数组排序方法:
公用函数:
Php代码
function printr($arr)
{
 echo '<pre>';
 print_r($arr);
 echo '</pre><br>';
}

第一组 :sort 和 rsort ,按照PHP数组键值的顺序asc和逆序desc进行排序,同时破坏原来数组的索引关系——其实是删除索引之后重新建立从0开始的数字索引。
Php代码
$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 分别用这两个函数替换一下

Php代码
$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 这两个不同于以上两组,这两函数是对键名进行排序的.
Php代码
$a = array('a'=>1,2);  
ksort($a); printr($a);  

krsort($a); printr($a);  
/* 
Array 

    [0] => 2 
    [a] => 1 

 
Array 

    [a] => 1 
    [0] => 2 

*/ 

通过自定义函数对PHP数组进行排序,有三个函数分别是:
uasort 通过自定义函数对PHP数组的键值进行排序,并且保留原来的索引关系。
uksort 通过自定义函数对PHP数组的键名进行排序,并且保留原来的索引关系。
usort通过自定义函数对PHP数组的键值进行排序,并且删除原来的索引关系,从零开始建立新的索引。

下面是二维排序:

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. 

* sysSortArray($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 sysSortArray($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] = $Info[$KeyName];  
      }  
  }  
  // Create the eval string and eval it.  
  $EvalString = 'array_multisort('.join(",",$SortRule).',$ArrayData);';  
  eval ($EvalString);  
  return $ArrayData;  

实例:
Php代码
//################# 示例 #################  
$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 = sysSortArray($arr,"name","SORT_ASC","type","SORT_DESC","size","SORT_ASC","SORT_STRING");  
print_r($temp);  
echo '</pre>'; 

3. 多维数组转一维数组
Php代码
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;  

实例:
Php代码
$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. 从数组中删除空白的元素
Php代码
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;     
            }    
        }     
    }     
}   

实例:
Java代码
$a = array(array(3),2,'',array('',23),0);  
array_remove_empty($a);  
printr($a); // printr 函数请在本文中找 

Tags:

PHP技术资料

评论

添加评论



(将显示你的Gravatar头像)  

biuquote
微笑得意调皮害羞酷大笑惊讶发呆喜欢可怜尴尬闭嘴噘嘴皱眉伤心抓狂呕吐坏笑漫骂发怒
Loading



Supidea.com 晨飞的梦 @ All Rights Reserved. Powered by BlogYi.NET ver:1.8.0.0. 苏ICP备09011404号

关于博主

kamau
抱着美好的理想背井离乡,这酸甜苦辣只能默默忍受。既然选择了路,就得风雨兼程……

Calendar

<<  二月 2012  >>
303112345
6789101112
13141516171819
20212223242526
2728291234
567891011

在日历中查看文章

最近的评论

Comment RSS

声明

      本博所发一切破解相关附件只作学习研究交流之用,严禁用于商业用途,请在下载24小时内删除。
      本博所有网友评论不代表本博立场,版权归其作者所有。

© Copyright 2009