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

PHP数组操作类实例

发布:smiling 来源: PHP粉丝网  添加日期:2021-06-11 09:57:28 浏览: 评论:0 

这篇文章主要介绍了PHP数组操作类,涉及php针对数组的删除、转换、分组、排序等相关操作技巧,具有一定参考借鉴价值,需要的朋友可以参考下。

本文实例讲述了PHP数组操作类,分享给大家供大家参考,具体如下:

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

Tags: PHP数组操作

分享到:

相关文章