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