{"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>"}