php对二维数组进行相关操作(排序、转换、去空白等)


Posted in PHP onNovember 04, 2015

技巧提示:

array_keys($array) //返回所有键名 
 
array_values($array) //返回所有键值  
 
$result=array_reverse($input); //将数组颠倒,不保留键名 
$result_keyed=array_reverse($input,true); //将数组颠倒,保留键名 
 
array_keys($array,"blue"); //返回值为blue的键名

1. PHP二维数组去重复项函数 
PHP数组去除重复项有个内置函数array_unique (),但是php的 array_unique函数只适用于一维数组,对多维数组并不适用,以下提供一个二维数组的array_unique函数

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数组进行排序,有三个函数分别是:
uasort 通过自定义函数对PHP数组的键值进行排序,并且保留原来的索引关系。
uksort 通过自定义函数对PHP数组的键名进行排序,并且保留原来的索引关系。
usort通过自定义函数对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对于二维数组的相应操作介绍的很详细,希望对大家的学习有所帮助。

PHP 相关文章推荐
mysql+php分页类(已测)
Mar 31 PHP
PHP获取网卡地址的代码
Apr 09 PHP
php 静态页面中显示动态内容
Aug 14 PHP
php中var_export与var_dump的区别分析
Aug 21 PHP
PHP curl 获取响应的状态码的方法
Jan 13 PHP
PHP中魔术变量__METHOD__与__FUNCTION__的区别
Sep 29 PHP
PHP Yaf框架的简单安装使用教程(推荐)
Jun 08 PHP
Yii2配置Nginx伪静态的方法
May 05 PHP
Laravel学习教程之本地化模块
Aug 18 PHP
原生JS实现Ajax通过GET方式与PHP进行交互操作示例
May 12 PHP
PHP JWT初识及其简单示例
Oct 10 PHP
Laravel5.5 手动分页和自定义分页样式的简单实现
Oct 15 PHP
两种php去除二维数组的重复项方法
Nov 04 #PHP
PHP扩展开发教程(总结)
Nov 04 #PHP
PHP实现GIF图片验证码
Nov 04 #PHP
php实现分页显示
Nov 03 #PHP
PHP翻页跳转功能实现方法
Nov 30 #PHP
php中注册器模式类用法实例分析
Nov 03 #PHP
php实现zip文件解压操作
Nov 03 #PHP
You might like
PHP实现提取一个图像文件并在浏览器上显示的代码
2012/10/06 PHP
Prototype使用指南之form.js
2007/01/10 Javascript
JavaScript 定义function的三种方式小结
2009/10/16 Javascript
客户端js性能优化小技巧整理
2013/11/05 Javascript
js字符串截取函数substr substring slice使用对比
2013/11/27 Javascript
jquery实现图片左右切换的方法
2015/05/07 Javascript
jquery实现不包含当前项的选择器实例
2015/06/25 Javascript
AngularJS中使用HTML5手机摄像头拍照
2016/02/22 Javascript
js中最容易被忽视的事件问题大总结
2016/05/15 Javascript
Nodejs下DNS缓存问题浅析
2016/11/16 NodeJs
Angular4 反向代理Details实践
2018/05/30 Javascript
Vue实现一个图片懒加载插件
2019/03/11 Javascript
五分钟搞懂Vuex实用知识(小结)
2019/08/12 Javascript
layui table去掉右侧滑动条的实现方法
2019/09/05 Javascript
vue实现随机验证码功能(完整代码)
2019/12/10 Javascript
[06:33]DOTA2亚洲邀请赛小组赛第二日 TOP10精彩集锦
2015/01/31 DOTA
python实现文件快照加密保护的方法
2015/06/30 Python
Python中对元组和列表按条件进行排序的方法示例
2015/11/10 Python
python基于pdfminer库提取pdf文字代码实例
2019/08/15 Python
Python实现图像去噪方式(中值去噪和均值去噪)
2019/12/18 Python
python实现的批量分析xml标签中各个类别个数功能示例
2019/12/30 Python
Python自动重新加载模块详解(autoreload module)
2020/04/01 Python
python 动态渲染 mysql 配置文件的示例
2020/11/20 Python
CSS3之多背景background使用示例
2013/10/18 HTML / CSS
世界最大域名注册商:GoDaddy
2016/07/24 全球购物
美国NBA官方商店:NBA Store
2019/04/12 全球购物
仓库管理专业个人自我评价范文
2013/11/11 职场文书
中学生获奖感言
2014/02/04 职场文书
年终总结会议主持词
2014/03/17 职场文书
搞笑创意广告语
2014/03/17 职场文书
学校党员对照检查材料
2014/08/28 职场文书
活动总结结尾怎么写
2014/08/30 职场文书
单位租车协议书
2015/01/29 职场文书
大一新生军训新闻稿
2015/07/17 职场文书
学校隐患排查制度
2015/08/05 职场文书
台式电脑蓝牙适配器怎么安装?台式电脑蓝牙适配器安装教程
2022/04/08 数码科技