最近正好遇到一个项目, 是有一个无限分类的内容, 需要处理成树结构. 之前一直使用的是递归的方式去处理的. 但是这种方式执行效率实在太低. 所以今天换了一个方式去处理.
下面贴上代码:
表结构:
到这里, 我想大家也看明白了, 这里没有使用PID的方式去处理的. PS. 上面的表结构我是在网上找的. 但是我的主要要表述的是我的处理方式;
先上代码:
<?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();
if (is_array($rows))
{
foreach ($rows as $k => $v)
{
$fullpath = explode('-',$v['fullpath']);
$count = count($fullpath);
$path = "tree";
for ($i = 0; $i < $count; $i++)
{
if ($i >= 1)
{
$path .= "[" . $fullpath[$i] . "]['CHILDREN']";
}
}
$arrStr = 'array(';
foreach ($v as $key => $val)
{
$arrStr .= '"' .$key . '" => "' . $val . '",';
}
$arrStr .= ')';
//echo ('$' . $path . '[' . $v['id'] . ']=' . $arrStr . ';' . '<br/>');
eval('$' . $path . '[' . $v['id'] . ']=' . $arrStr . ';');
}
file_put_contents('1.txt', print_r($tree, true));
}
//$tree['CHILDREN'][1] = array(['PROJECT_ID'] => 1, ['PID'] => 2, ....);
?>
最后的$tree就是我们所需要的数组. 这边的关键是字符串的拼接和 eval函数的使用.