zoukankan      html  css  js  c++  java
  • 好用的php类库和方法

    1,

        /**
         * 将一个平面的二维数组按照指定的字段转换为树状结构
         *
         * 用法:
         * @code php
         * $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 = ArrayHelper::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(),
         *   //        ),
         *   //   ),
         *   // )
         * @endcode
         *
         * 如果要获得任意节点为根的子树,可以使用 $refs 参数:
         * @code php
         * $refs = null;
         * $tree = ArrayHelper::tree($rows, 'id', 'parent', 'nodes', $refs);
         *
         * // 输出 id 为 3 的节点及其所有子节点
         * $id = 3;
         * dump($refs[$id]);
         * @endcode
         *
         * @param array $arr 数据源
         * @param string $keyNodeId 节点ID字段名
         * @param string $keyParentId 节点父ID字段名
         * @param string $keyChildrens 保存子节点的字段名
         * @param boolean $refs 是否在返回结果中包含节点引用
         *
         * return array 树形结构的数组
         */
        static function toTree($arr, $keyNodeId, $keyParentId = 'parent_id', $keyChildrens = 'childrens', & $refs = NULL)
        {
            $refs = array();
            foreach ($arr as $offset => $row)
            {
                $arr[$offset][$keyChildrens] = array();
                $refs[$row[$keyNodeId]] =& $arr[$offset];
            }
        
            $tree = array();
            foreach ($arr as $offset => $row)
            {
                $parentId = $row[$keyParentId];
                if ($parentId)
                {
                    if (!isset($refs[$parentId]))
                    {
                        $tree[] =& $arr[$offset];
                        continue;
                    }
                    $parent =& $refs[$parentId];
                    $parent[$keyChildrens][] =& $arr[$offset];
                }
                else
                {
                    $tree[] =& $arr[$offset];
                }
            }
            return $tree;
        }
        
        /**
         * 将树形数组展开为平面的数组
         *
         * 这个方法是 tree() 方法的逆向操作。
         *
         * @param array $tree 树形数组
         * @param string $keyChildrens 包含子节点的键名
         *
         * @return array 展开后的数组
         */
        static function treeToArray($tree, $keyChildrens = 'childrens')
        {
            $ret = array();
            if (isset($tree[$keyChildrens]) && is_array($tree[$keyChildrens]))
            {
                foreach ($tree[$keyChildrens] as $child)
                {
                    $ret = array_merge($ret, self::treeToArray($child, $keyChildrens));
                }
                unset($node[$keyChildrens]);
                $ret[] = $tree;
            }
            else
            {
                $ret[] = $tree;
            }
            return $ret;
        }

  • 相关阅读:
    144环形链表
    83. 删除排序链表中的重复元素
    21合并两个有序链表
    PyCharm2020激活破解教程
    Python正课目录
    2条pip命令解决Python项目依赖的导出和导出
    pip离线安装模块
    Python正课149 —— luffy项目 User表的配置
    Python正课148 —— luffy项目 数据库配置
    解决:django中LookupError No installed app with label 'admin'
  • 原文地址:https://www.cnblogs.com/jami918/p/3552657.html
Copyright © 2011-2022 走看看