包 core

包 mvc

包 orm

包 form

包 database

包 helper

包 cache

包 webcontrols

包 behavior

包 exception

包 debug

类 - Helper_Array

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

方法详细说明

removeEmpty() 方法

public static void removeEmpty($arr, $trim)

$arr array 要处理的数组
$trim boolean 是否对数组元素调用 trim 函数
{return}

从数组中删除空白的元素(包括只有空白字符的元素)

用法:

$arr = array('', 'test', '   ');
Helper_Array::removeEmpty($arr);
 
dump($arr);
  // 输出结果中将只有 'test'

getCols() 方法

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',
  // )

toHashmap() 方法

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'),
  // )

groupBy() 方法

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),
  //   ),
  // )

toTree() 方法

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]);

treeToArray() 方法

public static array treeToArray($tree, $key_children)

$tree array 树形数组
$key_children string 包含子节点的键名
{return} array 展开后的数组

将树形数组展开为平面的数组

这个方法是 tree() 方法的逆向操作。


sortByCol() 方法

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),
// )

sortByMultiCols() 方法

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