本文实例讲述了php数组操作类。分享给大家供大家参考。具体如下:
class arrayhelper{ /*** 从数组中删除空白的元素(包括只有空白字符的元素)** 用法:* @code php* $arr = array('', 'test', ' ');* arrayhelper::removeempty($arr);** dump($arr);* // 输出结果中将只有 'test'* @endcode** @param array $arr 要处理的数组* @param boolean $trim 是否对数组元素调用 trim 函数*/ static function removeempty(& $arr, $trim = true) {foreach ($arr as $key => $value){if (is_array($value)){self::removeempty($arr[$key]);}else{$value = trim($value);if ($value == ''){unset($arr[$key]);}elseif ($trim){$arr[$key] = $value;}}} } /*** 从一个二维数组中返回指定键的所有值** 用法:* @code php* $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** @param array $arr 数据源* @param string $col 要查询的键** @return array 包含指定键所有值的数组*/ static function getcols($arr, $col) {$ret = array();foreach ($arr as $row){if (isset($row[$col])) {$ret[] = $row[$col];}}return $ret; } /*** 将一个二维数组转换为 hashmap,,并返回结果** 用法1:* @code php* $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:* @code php* $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** @param array $arr 数据源* @param string $keyfield 按照什么键的值进行转换* @param string $valuefield 对应的键值** @return array 转换后的 hashmap 样式数组*/ static function tohashmap($arr, $keyfield, $valuefield = null) {$ret = array();if ($valuefield){foreach ($arr as $row){$ret[$row[$keyfield]] = $row[$valuefield];}}else{foreach ($arr as $row){$ret[$row[$keyfield]] = $row;}}return $ret; } /*** 将一个二维数组按照指定字段的值分组** 用法:* @endcode** @param array $arr 数据源* @param string $keyfield 作为分组依据的键名** @return array 分组后的结果*/ static function groupby($arr, $keyfield) {$ret = array();foreach ($arr as $row){$key = $row[$keyfield];$ret[$key][] = $row;}return $ret; } /*** 将一个平面的二维数组按照指定的字段转换为树状结构*** 如果要获得任意节点为根的子树,可以使用 $refs 参数:* @code php* $refs = null;* $tree = arrayhelper::tree($rows, 'id', 'parent', 'nodes', $refs);** // 输出 id 为 3 的节点及其所有子节点* $id = 3;* dump($refs[$id]);* @endcode** @param array $arr 数据源* @param string $keynodeid 节点id字段名* @param string $keyparentid 节点父id字段名* @param string $keychildrens 保存子节点的字段名* @param boolean $refs 是否在返回结果中包含节点引用** return array 树形结构的数组*/ static function totree($arr, $keynodeid, $keyparentid = 'parent_id', $keychildrens = 'childrens', & $refs = null) {$refs = array();foreach ($arr as $offset => $row){$arr[$offset][$keychildrens] = array();$refs[$row[$keynodeid]] =& $arr[$offset];}$tree = array();foreach ($arr as $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() 方法的逆向操作。** @param array $tree 树形数组* @param string $keychildrens 包含子节点的键名** @return array 展开后的数组*/ static function treetoarray($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** @param array $array 要排序的数组* @param string $keyname 排序的键* @param int $dir 排序方向** @return array 排序后的数组*/ static function sortbycol($array, $keyname, $dir = sort_asc) {return self::sortbymulticols($array, array($keyname => $dir)); } /*** 将一个二维数组按照多个列进行排序,类似 sql 语句中的 order by** 用法:* @code php* $rows = arrayhelper::sortbymulticols($rows, array(* 'parent' => sort_asc,* 'name' => sort_desc,* ));* @endcode** @param array $rowset 要排序的数组* @param array $args 排序的键** @return array 排序后的数组*/ static function sortbymulticols($rowset, $args) {$sortarray = array();$sortrule = '';foreach ($args as $sortfield => $sortdir){foreach ($rowset as $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; }}
希望本文所述对大家的php程序设计有所帮助。
