可爱熊个人博客

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

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;   
  • }  
  • //二维数组去掉重复值
    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>’;   
  • }  
  • 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  
  • )  
  • */  
  • $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  
  • )  
  • */  
  • $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  
  • )  
  • */  
  • $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;   
  • }  
  • /**
    * @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>’;  
  • //################# 示例 #################
    $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;   
  • }  
  • 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>’;  
  • $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;      
  •             }     
  •         }      
  •     }      
  • }    
  • 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:

    留下回复

    :wink: :twisted: :roll: :oops: :mrgreen: :lol: :idea: :evil: :cry: :arrow: :?: :-| :-x :-o :-P :-D :-? :) :( :!: 8-O 8)