本方承接上我的上一篇文章, 上一篇说的是高效的去处理一个无限级数. 当时我用的方法是处理成字符串, 拼接后再eval处理. 那么本文再讲述另外一种处理方式.
申明一下. 这种方法不是我自己想到的, 是我在讲了之前那种方法后, 一个同事想到后和我分享的. 我觉得好的东西, 应该拿到网络上来分享一下.
好的, 言归正转: 数据存储结构可以和之前的一样.
这种方法的核心是使用PHP的引用 . 下面直接上Code. 如果有什么不明白的, 可以回复问. - -
<?php
mysql_connect("10.1.59.222:3306", 'root', '123456');
mysql_select_db('demo');
mysql_query("SET NAMES UTF8");
$sql = "select id, catpath as fullpath, name from category order by fullpath";
$result = mysql_query($sql);
$rows = array();
while (false !== ($row = mysql_fetch_array($result, MYSQL_ASSOC)))
{
$row['name'] = iconv('utf-8', 'gbk', $row['name']);
$rows[] = $row;
}
$tree = array();
$temp = array();
foreach ($rows as $k => $v)
{
$temp[$v['id']]['id'] = $v['id'];
$temp[$v['id']]['pid'] = $v['pid'];
$temp[$v['id']]['name'] = $v['name'];
$temp[$v['id']]['leaf'] = true;
}
foreach ($temp as $k => $v)
{
if (isset($temp[$v['pid']]))
{
$temp[$v['pid']]['expanded'] = true;
$temp[$v['pid']]['leaf'] = false;
$temp[$v['pid']]['children'][] = &$temp[$v['id']];
}
else
{
$tree[] = &$temp[$v['id']];
}
}
unset($temp);
我想这样大家应该可以直白的看明白 . - - , 不多说.