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 two_array_unique($array)
{
    foreach ($array 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;


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);  

第二组函数:asort 和 arsort ,这两个函数就比较厉害一点了,只要他们可以保留数组原有的索引关系,把上例的sort 和 rsort 分别用这两个函数替换一下

Php代码
$a = array('a'=>1,2); 
asort($a); printr($a); 
arsort($a); printr($a);  
 
第三组PHP数组排序函数:krsort 和 ksort 这两个不同于以上两组,这两函数是对键名进行排序的.
Php代码
$a = array('a'=>1,2); 
ksort($a); printr($a); 

krsort($a); printr($a); 

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

下面是二维排序:

Php代码

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 函数请在本文中找

转载于:https://my.oschina.net/junn/blog/133753

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值