当前位置:首页 > PHP教程 > php数组 > 列表

PHP实现的操作数组类库定义与用法示例

发布:smiling 来源: PHP粉丝网  添加日期:2021-11-23 10:47:57 浏览: 评论:0 

这篇文章主要介绍了PHP实现的操作数组类库定义与用法,结合实例形式分析了php数组操作类完整定义与简单使用技巧,需要的朋友可以参考下。

本文实例讲述了PHP实现的操作数组类库定义与用法,分享给大家供大家参考,具体如下:

类库(完整类库):

  1. <?php 
  2. class ArrayHelper{ 
  3.   /** 
  4.    * 从数组中删除空白的元素(包括只有空白字符的元素) 
  5.    * 
  6.    * 用法: 
  7.    * @code php 
  8.    * $arr = array('', 'test', '  '); 
  9.    * ArrayHelper::removeEmpty($arr); 
  10.    * 
  11.    * dump($arr); 
  12.    *  // 输出结果中将只有 'test' 
  13.    * @endcode 
  14.    * 
  15.    * @param array $arr 要处理的数组 
  16.    * @param boolean $trim 是否对数组元素调用 trim 函数 
  17.    */ 
  18.   static function removeEmpty(& $arr$trim = TRUE) 
  19.   { 
  20.     foreach ($arr as $key => $value
  21.     { 
  22.       if (is_array($value)) 
  23.       { 
  24.         self::removeEmpty($arr[$key]); 
  25.       } 
  26.       else 
  27.       { 
  28.         $value = trim($value); 
  29.         if ($value == ''
  30.         { 
  31.           unset($arr[$key]); 
  32.         } 
  33.         elseif ($trim
  34.         { 
  35.           $arr[$key] = $value
  36.         } 
  37.       } 
  38.     } 
  39.   } 
  40.   /** 
  41.    * 从一个二维数组中返回指定键的所有值 
  42.    * 
  43.    * 用法: 
  44.    * @code php 
  45.    * $rows = array( 
  46.    *   array('id' => 1, 'value' => '1-1'), 
  47.    *   array('id' => 2, 'value' => '2-1'), 
  48.    * ); 
  49.    * $values = ArrayHelper::getCols($rows, 'value'); 
  50.    * 
  51.    * dump($values); 
  52.    *  // 输出结果为 
  53.    *  // array( 
  54.    *  //  '1-1', 
  55.    *  //  '2-1', 
  56.    *  // ) 
  57.    * @endcode 
  58.    * 
  59.    * @param array $arr 数据源 
  60.    * @param string $col 要查询的键 
  61.    * 
  62.    * @return array 包含指定键所有值的数组 
  63.    */ 
  64.   static function getCols($arr$col
  65.   { 
  66.     $ret = array(); 
  67.     foreach ($arr as $row
  68.     { 
  69.       if (isset($row[$col])) { 
  70.         $ret[] = $row[$col]; 
  71.       } 
  72.     } 
  73.     return $ret
  74.   } 
  75.   /** 
  76.    * 将一个二维数组转换为 HashMap,并返回结果 
  77.    * 
  78.    * 用法1: 
  79.    * @code php 
  80.    * $rows = array( 
  81.    *   array('id' => 1, 'value' => '1-1'), 
  82.    *   array('id' => 2, 'value' => '2-1'), 
  83.    * ); 
  84.    * $hashmap = ArrayHelper::toHashmap($rows, 'id', 'value'); 
  85.    * 
  86.    * dump($hashmap); 
  87.    *  // 输出结果为 
  88.    *  // array( 
  89.    *  //  1 => '1-1', 
  90.    *  //  2 => '2-1', 
  91.    *  // ) 
  92.    * @endcode 
  93.    * 
  94.    * 如果省略 $valueField 参数,则转换结果每一项为包含该项所有数据的数组。 
  95.    * 
  96.    * 用法2: 
  97.    * @code php 
  98.    * $rows = array( 
  99.    *   array('id' => 1, 'value' => '1-1'), 
  100.    *   array('id' => 2, 'value' => '2-1'), 
  101.    * ); 
  102.    * $hashmap = ArrayHelper::toHashmap($rows, 'id'); 
  103.    * 
  104.    * dump($hashmap); 
  105.    *  // 输出结果为 
  106.    *  // array( 
  107.    *  //  1 => array('id' => 1, 'value' => '1-1'), 
  108.    *  //  2 => array('id' => 2, 'value' => '2-1'), 
  109.    *  // ) 
  110.    * @endcode 
  111.    * 
  112.    * @param array $arr 数据源 
  113.    * @param string $keyField 按照什么键的值进行转换 
  114.    * @param string $valueField 对应的键值 
  115.    * 
  116.    * @return array 转换后的 HashMap 样式数组 
  117.    */ 
  118.   static function toHashmap($arr$keyField$valueField = NULL) 
  119.   { 
  120.     $ret = array(); 
  121.     if ($valueField
  122.     { 
  123.       foreach ($arr as $row
  124.       { 
  125.         $ret[$row[$keyField]] = $row[$valueField]; 
  126.       } 
  127.     } 
  128.     else 
  129.     { 
  130.       foreach ($arr as $row
  131.       { 
  132.         $ret[$row[$keyField]] = $row
  133.       } 
  134.     } 
  135.     return $ret
  136.   } 
  137.   /** 
  138.    * 将一个二维数组按照指定字段的值分组 
  139.    * 
  140.    * 用法: 
  141.    * @endcode 
  142.    * 
  143.    * @param array $arr 数据源 
  144.    * @param string $keyField 作为分组依据的键名 
  145.    * 
  146.    * @return array 分组后的结果 
  147.    */ 
  148.   static function groupBy($arr$keyField
  149.   { 
  150.     $ret = array(); 
  151.     foreach ($arr as $row
  152.     { 
  153.       $key = $row[$keyField]; 
  154.       $ret[$key][] = $row
  155.     } 
  156.     return $ret
  157.   } 
  158.   /** 
  159.    * 将一个平面的二维数组按照指定的字段转换为树状结构 
  160.    * 
  161.    * 
  162.    * 如果要获得任意节点为根的子树,可以使用 $refs 参数: 
  163.    * @code php 
  164.    * $refs = null; 
  165.    * $tree = ArrayHelper::tree($rows, 'id', 'parent', 'nodes', $refs); 
  166.    * 
  167.    * // 输出 id 为 3 的节点及其所有子节点 
  168.    * $id = 3; 
  169.    * dump($refs[$id]); 
  170.    * @endcode 
  171.    * 
  172.    * @param array $arr 数据源 
  173.    * @param string $keyNodeId 节点ID字段名 
  174.    * @param string $keyParentId 节点父ID字段名 
  175.    * @param string $keyChildrens 保存子节点的字段名 
  176.    * @param boolean $refs 是否在返回结果中包含节点引用 
  177.    * 
  178.    * return array 树形结构的数组 
  179.    */ 
  180.   static function toTree($arr$keyNodeId$keyParentId = 'parent_id'$keyChildrens = 'childrens', & $refs = NULL) 
  181.   { 
  182.     $refs = array(); 
  183.     foreach ($arr as $offset => $row
  184.     { 
  185.       $arr[$offset][$keyChildrens] = array(); 
  186.       $refs[$row[$keyNodeId]] =& $arr[$offset]; 
  187.     } 
  188.     $tree = array(); 
  189.     foreach ($arr as $offset => $row
  190.     { 
  191.       $parentId = $row[$keyParentId]; 
  192.       if ($parentId
  193.       { 
  194.         if (!isset($refs[$parentId])) 
  195.         { 
  196.           $tree[] =& $arr[$offset]; 
  197.           continue
  198.         } 
  199.         $parent =& $refs[$parentId]; 
  200.         $parent[$keyChildrens][] =& $arr[$offset]; 
  201.       } 
  202.       else 
  203.       { 
  204.         $tree[] =& $arr[$offset]; 
  205.       } 
  206.     } 
  207.     return $tree
  208.   } 
  209.   /** 
  210.    * 将树形数组展开为平面的数组 
  211.    * 
  212.    * 这个方法是 tree() 方法的逆向操作。 
  213.    * 
  214.    * @param array $tree 树形数组 
  215.    * @param string $keyChildrens 包含子节点的键名 
  216.    * 
  217.    * @return array 展开后的数组 
  218.    */ 
  219.   static function treeToArray($tree$keyChildrens = 'childrens'
  220.   { 
  221.     $ret = array(); 
  222.     if (isset($tree[$keyChildrens]) && is_array($tree[$keyChildrens])) 
  223.     { 
  224.       foreach ($tree[$keyChildrensas $child
  225.       { 
  226.         $ret = array_merge($ret, self::treeToArray($child$keyChildrens)); 
  227.       } 
  228.       unset($node[$keyChildrens]); 
  229.       $ret[] = $tree
  230.     } 
  231.     else 
  232.     { 
  233.       $ret[] = $tree
  234.     } 
  235.     return $ret
  236.   } 
  237.   /** 
  238.    * 根据指定的键对数组排序 
  239.    * 
  240.    * @endcode 
  241.    * 
  242.    * @param array $array 要排序的数组 
  243.    * @param string $keyname 排序的键 
  244.    * @param int $dir 排序方向 
  245.    * 
  246.    * @return array 排序后的数组 
  247.    */ 
  248.   static function sortByCol($array$keyname$dir = SORT_ASC) 
  249.   { 
  250.     return self::sortByMultiCols($arrayarray($keyname => $dir)); 
  251.   } 
  252.   /** 
  253.    * 将一个二维数组按照多个列进行排序,类似 SQL 语句中的 ORDER BY 
  254.    * 
  255.    * 用法: 
  256.    * @code php 
  257.    * $rows = ArrayHelper::sortByMultiCols($rows, array( 
  258.    *   'parent' => SORT_ASC, 
  259.    *   'name' => SORT_DESC, 
  260.    * )); 
  261.    * @endcode 
  262.    * 
  263.    * @param array $rowset 要排序的数组 
  264.    * @param array $args 排序的键 
  265.    * 
  266.    * @return array 排序后的数组 
  267.    */ 
  268.   static function sortByMultiCols($rowset$args
  269.   { 
  270.     $sortArray = array(); 
  271.     $sortRule = ''
  272.     foreach ($args as $sortField => $sortDir
  273.     { 
  274.       foreach ($rowset as $offset => $row
  275.       { 
  276.         $sortArray[$sortField][$offset] = $row[$sortField]; 
  277.       } 
  278.       $sortRule .= '$sortArray[\'\' . $sortField .\'\'], ' . $sortDir . ', '
  279.     } 
  280.     if (emptyempty($sortArray) || emptyempty($sortRule)) { 
  281.       return $rowset
  282.     } 
  283.     eval('array_multisort(' . $sortRule . '$rowset);'); 
  284.     return $rowset
  285.   } 
  286. ?> 

用法示例:

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

用法:

  1. $arr = array('''test''  '); 
  2. ArrayHelper::removeEmpty($arr); 
  3. var_dump($arr); 

输出结果中将只有 'test'

  1. array(1) { 
  2.   [1]=> 
  3.   string(4) "test" 
  4. }

Tags: PHP数组类库

分享到: