{"id":388,"title":"\u65e0\u9650\u7ea7\u5206\u7c7b\u83dc\u5355","good":0,"bad":0,"hit":1667,"created_at":"2018-08-02 14:57:30","content":"
private function categoriesTree($categories, $fid = 0, $level = 0)\n{\n    static $tree = [];\n    foreach ($categories as $key => $category) {\n        if ($fid == $category['CategoryID']) {\n            $category['level'] = $level;\n            $tree[] = $category;\n            unset($categories[$key]);\n            self::categoriesTree($categories, $category['ID'], $level + 1);\n        }\n    }\n    return $tree;\n}<\/pre>

<\/p>

<\/p>

<\/p>

\/*\n     * \u83b7\u5f97\u9012\u5f52\u5b8c\u7684\u6570\u636e,\u904d\u5386\u751f\u6210\u5206\u7c7b\n     *\/<\/span>\n    <\/span>$array<\/span> = getTree(<\/span>$array<\/span>);    <\/span>foreach<\/span>(<\/span>$array<\/span>) <\/span>as<\/span> <\/span>$value<\/span>{       <\/span>echo<\/span> str_repeat(<\/span>'--'<\/span>, <\/span>$value<\/span>[<\/span>'level'<\/span>]), <\/span>$value<\/span>[<\/span>'name'<\/span>].<\/span>'<br \/>'<\/span>;\n    }<\/span><\/p>

<\/span><\/p>

<\/span><\/p>

\u8fd9\u79cd\u65b9\u5f0f\u4e5f\u4e0d\u9519\uff1a<\/span><\/p>

<\/span><\/p>

<\/span><\/p>

    \/**<\/p>

     * \u751f\u6210\u6811\uff1a\u65e0\u9650\u7ea7\u83dc\u5355<\/p>

     *<\/p>

     * @param array $items \u6570\u636e<\/p>

     * @param string $idFieldName \u4e3b\u952e\u5b57\u6bb5\u540d\uff0c\u4e00\u822c\u4e3aid<\/p>

     * @param string $fIdFieldName  \u4e0a\u7ea7id\u540d\uff0c\u5982:fid,pid\u4e4b\u7c7b<\/p>

     * @return array<\/p>

     *\/<\/p>

    public function toTree($items, $idFieldName, $fIdFieldName)<\/p>

    {<\/p>

        $map = [];<\/p>

        $tree = [];<\/p>

<\/p>

        if($items){<\/p>

            \/\/\u6570\u636e\u7684ID\u540d\u751f\u6210\u65b0\u7684\u5f15\u7528\u7d22\u5f15\u6811<\/p>

            foreach ($items as &$it) {<\/p>

                $map[$it[$idFieldName]] = &$it;<\/p>

            }<\/p>

            foreach ($items as &$it) {<\/p>

                $parent = &$map[$it[$fIdFieldName]];<\/p>

                if ($parent) {<\/p>

                    $parent['son'][] = &$it;<\/p>

                } else {<\/p>

                    $tree[] = &$it;<\/p>

                }<\/p>

            }<\/p>

            $tree=treeLevel($tree);\/\/\u4e0a\u9762\u7684level\u8d85\u8fc72\u5c42\u5c31\u4e0d\u5bf9\u4e86<\/p>

        }<\/p>

<\/p>

        return $tree;<\/p>

    }<\/p>

<\/span><\/p>

function treeLevel($tree, $level = 1)<\/p>

{<\/p>

    foreach ($tree as $i => &$item) {<\/p>

        $item['level'] = $level;<\/p>

        if (isset($item['son'])) {<\/p>

            treeLevel($item['son'], $level + 1);<\/p>

        }<\/p>

    }<\/p>

    return $tree;<\/p>

}<\/p>

<\/p>

<\/p>

\u8fd9\u79cd\u66f4\u7b80\u5355\uff1a<\/p>

<\/p>

\/**<\/p>

 * \u65e0\u9650\u9012\u5f52\u6811<\/p>

 *\/<\/p>

function make_tree($list, $pk = 'id', $pid = 'parent_id', $child = 'son', $root = 0)<\/p>

{<\/p>

    $tree = array();<\/p>

    $packData = array();<\/p>

    foreach ($list as $data) {<\/p>

        $packData[$data[$pk]] = $data;<\/p>

    }<\/p>

    foreach ($packData as $key => $val) {<\/p>

        if ($val[$pid] == $root) {\/\/\u4ee3\u8868\u8ddf\u8282\u70b9<\/p>

            $tree[] =& $packData[$key];<\/p>

        } else {<\/p>

            \/\/\u627e\u5230\u5176\u7236\u7c7b<\/p>

            $packData[$val[$pid]][$child][] =& $packData[$key];<\/p>

        }<\/p>

    }<\/p>

    return $tree;<\/p>

}<\/p>

<\/p>"}