| 包 | helper | 
|---|---|
| 类层次 | class Helper_Array | 
| 版本 | $Id: array.php 2630 2009-07-17 16:43:52Z jerry $ | 
Helper_Array 类提供了一组简化数组操作的方法
| 方法 | 描述 | 定义于 | 
|---|---|---|
| removeEmpty() | 从数组中删除空白的元素(包括只有空白字符的元素) | Helper_Array | 
| getCols() | 从一个二维数组中返回指定键的所有值 | Helper_Array | 
| toHashmap() | 将一个二维数组转换为 HashMap,并返回结果 | Helper_Array | 
| groupBy() | 将一个二维数组按照指定字段的值分组 | Helper_Array | 
| toTree() | 将一个平面的二维数组按照指定的字段转换为树状结构 | Helper_Array | 
| treeToArray() | 将树形数组展开为平面的数组 | Helper_Array | 
| sortByCol() | 根据指定的键对数组排序 | Helper_Array | 
| sortByMultiCols() | 将一个二维数组按照多个列进行排序,类似 SQL 语句中的 ORDER BY | Helper_Array | 
public static void removeEmpty($arr, $trim)
| $arr | array | 要处理的数组 | 
| $trim | boolean | 是否对数组元素调用 trim 函数 | 
| {return} | 
从数组中删除空白的元素(包括只有空白字符的元素)
用法:
$arr = array('', 'test', ' '); Helper_Array::removeEmpty($arr); dump($arr); // 输出结果中将只有 'test'
public static array getCols($arr, $col)
| $arr | array | 数据源 | 
| $col | string | 要查询的键 | 
| {return} | array | 包含指定键所有值的数组 | 
从一个二维数组中返回指定键的所有值
用法:
$rows = array( array('id' => 1, 'value' => '1-1'), array('id' => 2, 'value' => '2-1'), ); $values = Helper_Array::cols($rows, 'value'); dump($values); // 输出结果为 // array( // '1-1', // '2-1', // )
public static array toHashmap($arr, $key_field, $value_field)
| $arr | array | 数据源 | 
| $key_field | string | 按照什么键的值进行转换 | 
| $value_field | string | 对应的键值 | 
| {return} | array | 转换后的 HashMap 样式数组 | 
将一个二维数组转换为 HashMap,并返回结果
用法1:
$rows = array( array('id' => 1, 'value' => '1-1'), array('id' => 2, 'value' => '2-1'), ); $hashmap = Helper_Array::hashMap($rows, 'id', 'value'); dump($hashmap); // 输出结果为 // array( // 1 => '1-1', // 2 => '2-1', // )
如果省略 $value_field 参数,则转换结果每一项为包含该项所有数据的数组。
用法2:
$rows = array( array('id' => 1, 'value' => '1-1'), array('id' => 2, 'value' => '2-1'), ); $hashmap = Helper_Array::hashMap($rows, 'id'); dump($hashmap); // 输出结果为 // array( // 1 => array('id' => 1, 'value' => '1-1'), // 2 => array('id' => 2, 'value' => '2-1'), // )
public static array groupBy($arr, $key_field)
| $arr | array | 数据源 | 
| $key_field | string | 作为分组依据的键名 | 
| {return} | array | 分组后的结果 | 
将一个二维数组按照指定字段的值分组
用法:
$rows = array( array('id' => 1, 'value' => '1-1', 'parent' => 1), array('id' => 2, 'value' => '2-1', 'parent' => 1), array('id' => 3, 'value' => '3-1', 'parent' => 1), array('id' => 4, 'value' => '4-1', 'parent' => 2), array('id' => 5, 'value' => '5-1', 'parent' => 2), array('id' => 6, 'value' => '6-1', 'parent' => 3), ); $values = Helper_Array::groupBy($rows, 'parent'); dump($values); // 按照 parent 分组的输出结果为 // array( // 1 => array( // array('id' => 1, 'value' => '1-1', 'parent' => 1), // array('id' => 2, 'value' => '2-1', 'parent' => 1), // array('id' => 3, 'value' => '3-1', 'parent' => 1), // ), // 2 => array( // array('id' => 4, 'value' => '4-1', 'parent' => 2), // array('id' => 5, 'value' => '5-1', 'parent' => 2), // ), // 3 => array( // array('id' => 6, 'value' => '6-1', 'parent' => 3), // ), // )
public static void toTree($arr, $key_node_id, $key_parent_id, $key_children, $refs)
| $arr | array | 数据源 | 
| $key_node_id | string | 节点ID字段名 | 
| $key_parent_id | string | 节点父ID字段名 | 
| $key_children | string | 保存子节点的字段名 | 
| $refs | boolean | 是否在返回结果中包含节点引用 return array 树形结构的数组 | 
| {return} | 
将一个平面的二维数组按照指定的字段转换为树状结构
用法:
$rows = array( array('id' => 1, 'value' => '1-1', 'parent' => 0), array('id' => 2, 'value' => '2-1', 'parent' => 0), array('id' => 3, 'value' => '3-1', 'parent' => 0), array('id' => 7, 'value' => '2-1-1', 'parent' => 2), array('id' => 8, 'value' => '2-1-2', 'parent' => 2), array('id' => 9, 'value' => '3-1-1', 'parent' => 3), array('id' => 10, 'value' => '3-1-1-1', 'parent' => 9), ); $tree = Helper_Array::tree($rows, 'id', 'parent', 'nodes'); dump($tree); // 输出结果为: // array( // array('id' => 1, ..., 'nodes' => array()), // array('id' => 2, ..., 'nodes' => array( // array(..., 'parent' => 2, 'nodes' => array()), // array(..., 'parent' => 2, 'nodes' => array()), // ), // array('id' => 3, ..., 'nodes' => array( // array('id' => 9, ..., 'parent' => 3, 'nodes' => array( // array(..., , 'parent' => 9, 'nodes' => array(), // ), // ), // )
如果要获得任意节点为根的子树,可以使用 $refs 参数:
$refs = null; $tree = Helper_Array::tree($rows, 'id', 'parent', 'nodes', $refs); // 输出 id 为 3 的节点及其所有子节点 $id = 3; dump($refs[$id]);
public static array treeToArray($tree, $key_children)
| $tree | array | 树形数组 | 
| $key_children | string | 包含子节点的键名 | 
| {return} | array | 展开后的数组 | 
将树形数组展开为平面的数组
这个方法是 tree() 方法的逆向操作。
public static array sortByCol($array, $keyname, $dir)
| $array | array | 要排序的数组 | 
| $keyname | string | 排序的键 | 
| $dir | int | 排序方向 | 
| {return} | array | 排序后的数组 | 
根据指定的键对数组排序
用法:
$rows = array( array('id' => 1, 'value' => '1-1', 'parent' => 1), array('id' => 2, 'value' => '2-1', 'parent' => 1), array('id' => 3, 'value' => '3-1', 'parent' => 1), array('id' => 4, 'value' => '4-1', 'parent' => 2), array('id' => 5, 'value' => '5-1', 'parent' => 2), array('id' => 6, 'value' => '6-1', 'parent' => 3), ); $rows = Helper_Array::sortByCol($rows, 'id', SORT_DESC); dump($rows); // 输出结果为: // array( // array('id' => 6, 'value' => '6-1', 'parent' => 3), // array('id' => 5, 'value' => '5-1', 'parent' => 2), // array('id' => 4, 'value' => '4-1', 'parent' => 2), // array('id' => 3, 'value' => '3-1', 'parent' => 1), // array('id' => 2, 'value' => '2-1', 'parent' => 1), // array('id' => 1, 'value' => '1-1', 'parent' => 1), // )
public static array sortByMultiCols($rowset, $args)
| $rowset | array | 要排序的数组 | 
| $args | array | 排序的键 | 
| {return} | array | 排序后的数组 | 
将一个二维数组按照多个列进行排序,类似 SQL 语句中的 ORDER BY
用法:
$rows = Helper_Array::sortByMultiCols($rows, array( 'parent' => SORT_ASC, 'name' => SORT_DESC, ));