PHP实现的操作数组类库定义与用法示例
本文实例讲述了PHP实现的操作数组类库定义与用法。分享给大家供大家参考,具体如下:
类库(完整类库):
$value) { if(is_array($value)) { self::removeEmpty($arr[$key]); } else { $value=trim($value); if($value=='') { unset($arr[$key]); } elseif($trim) { $arr[$key]=$value; } } } } /** *从一个二维数组中返回指定键的所有值 * *用法: *@codephp *$rows=array( *array('id'=>1,'value'=>'1-1'), *array('id'=>2,'value'=>'2-1'), *); *$values=ArrayHelper::getCols($rows,'value'); * *dump($values); *//输出结果为 *//array( *//'1-1', *//'2-1', *//) *@endcode * *@paramarray$arr数据源 *@paramstring$col要查询的键 * *@returnarray包含指定键所有值的数组 */ staticfunctiongetCols($arr,$col) { $ret=array(); foreach($arras$row) { if(isset($row[$col])){ $ret[]=$row[$col]; } } return$ret; } /** *将一个二维数组转换为HashMap,并返回结果 * *用法1: *@codephp *$rows=array( *array('id'=>1,'value'=>'1-1'), *array('id'=>2,'value'=>'2-1'), *); *$hashmap=ArrayHelper::toHashmap($rows,'id','value'); * *dump($hashmap); *//输出结果为 *//array( *//1=>'1-1', *//2=>'2-1', *//) *@endcode * *如果省略$valueField参数,则转换结果每一项为包含该项所有数据的数组。 * *用法2: *@codephp *$rows=array( *array('id'=>1,'value'=>'1-1'), *array('id'=>2,'value'=>'2-1'), *); *$hashmap=ArrayHelper::toHashmap($rows,'id'); * *dump($hashmap); *//输出结果为 *//array( *//1=>array('id'=>1,'value'=>'1-1'), *//2=>array('id'=>2,'value'=>'2-1'), *//) *@endcode * *@paramarray$arr数据源 *@paramstring$keyField按照什么键的值进行转换 *@paramstring$valueField对应的键值 * *@returnarray转换后的HashMap样式数组 */ staticfunctiontoHashmap($arr,$keyField,$valueField=NULL) { $ret=array(); if($valueField) { foreach($arras$row) { $ret[$row[$keyField]]=$row[$valueField]; } } else { foreach($arras$row) { $ret[$row[$keyField]]=$row; } } return$ret; } /** *将一个二维数组按照指定字段的值分组 * *用法: *@endcode * *@paramarray$arr数据源 *@paramstring$keyField作为分组依据的键名 * *@returnarray分组后的结果 */ staticfunctiongroupBy($arr,$keyField) { $ret=array(); foreach($arras$row) { $key=$row[$keyField]; $ret[$key][]=$row; } return$ret; } /** *将一个平面的二维数组按照指定的字段转换为树状结构 * * *如果要获得任意节点为根的子树,可以使用$refs参数: *@codephp *$refs=null; *$tree=ArrayHelper::tree($rows,'id','parent','nodes',$refs); * *//输出id为3的节点及其所有子节点 *$id=3; *dump($refs[$id]); *@endcode * *@paramarray$arr数据源 *@paramstring$keyNodeId节点ID字段名 *@paramstring$keyParentId节点父ID字段名 *@paramstring$keyChildrens保存子节点的字段名 *@paramboolean$refs是否在返回结果中包含节点引用 * *returnarray树形结构的数组 */ staticfunctiontoTree($arr,$keyNodeId,$keyParentId='parent_id',$keyChildrens='childrens',&$refs=NULL) { $refs=array(); foreach($arras$offset=>$row) { $arr[$offset][$keyChildrens]=array(); $refs[$row[$keyNodeId]]=&$arr[$offset]; } $tree=array(); foreach($arras$offset=>$row) { $parentId=$row[$keyParentId]; if($parentId) { if(!isset($refs[$parentId])) { $tree[]=&$arr[$offset]; continue; } $parent=&$refs[$parentId]; $parent[$keyChildrens][]=&$arr[$offset]; } else { $tree[]=&$arr[$offset]; } } return$tree; } /** *将树形数组展开为平面的数组 * *这个方法是tree()方法的逆向操作。 * *@paramarray$tree树形数组 *@paramstring$keyChildrens包含子节点的键名 * *@returnarray展开后的数组 */ staticfunctiontreeToArray($tree,$keyChildrens='childrens') { $ret=array(); if(isset($tree[$keyChildrens])&&is_array($tree[$keyChildrens])) { foreach($tree[$keyChildrens]as$child) { $ret=array_merge($ret,self::treeToArray($child,$keyChildrens)); } unset($node[$keyChildrens]); $ret[]=$tree; } else { $ret[]=$tree; } return$ret; } /** *根据指定的键对数组排序 * *@endcode * *@paramarray$array要排序的数组 *@paramstring$keyname排序的键 *@paramint$dir排序方向 * *@returnarray排序后的数组 */ staticfunctionsortByCol($array,$keyname,$dir=SORT_ASC) { returnself::sortByMultiCols($array,array($keyname=>$dir)); } /** *将一个二维数组按照多个列进行排序,类似SQL语句中的ORDERBY * *用法: *@codephp *$rows=ArrayHelper::sortByMultiCols($rows,array( *'parent'=>SORT_ASC, *'name'=>SORT_DESC, *)); *@endcode * *@paramarray$rowset要排序的数组 *@paramarray$args排序的键 * *@returnarray排序后的数组 */ staticfunctionsortByMultiCols($rowset,$args) { $sortArray=array(); $sortRule=''; foreach($argsas$sortField=>$sortDir) { foreach($rowsetas$offset=>$row) { $sortArray[$sortField][$offset]=$row[$sortField]; } $sortRule.='$sortArray[\'\'.$sortField.\'\'],'.$sortDir.','; } if(empty($sortArray)||empty($sortRule)){ return$rowset; } eval('array_multisort('.$sortRule.'$rowset);'); return$rowset; } } ?>
用法示例:
从数组中删除空白的元素(包括只有空白字符的元素)
用法:
$arr=array('','test',''); ArrayHelper::removeEmpty($arr); var_dump($arr);
输出结果中将只有'test'
array(1){
[1]=>
string(4)"test"
}
更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP数组(Array)操作技巧大全》、《php排序算法总结》、《PHP数据结构与算法教程》、《php程序设计算法总结》、《php字符串(string)用法总结》及《PHP常用遍历算法与技巧总结》
希望本文所述对大家PHP程序设计有所帮助。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。