我有这样的邻接列表模式结构,我想根据级别计算父级的所有标题 Food = (2,4,3), Fruit = (3,3)
树表结构

在那之后做那样的树

通过这个代码我得到正确的总和像食物= 9,水果= 6
function display_children($parent, $level)
{
$result = mysql_query('SELECT title FROM tree '.'WHERE parent="'.$parent.'"');
$count = 0;
while ($row = mysql_fetch_array($result))
{
$data= str_repeat(' ',$level).$row['title']."\n";
echo $data;
$count += 1 + $this->display_children($row['title'], $level+1);
}
return $count;
}
Run Code Online (Sandbox Code Playgroud)
通话功能
display_children(Food, 0)
Run Code Online (Sandbox Code Playgroud)
结果:9 //但我希望得到像2,4,3的结果
但我希望得到的数据总结果如同食物2,4,3和水果3,3等级
所以PLZ指导如何获得总水平
如果您想按级别获取金额,请让函数按级别返回它们。
function display_children($parent, $level)
{
$result = mysql_query('SELECT title FROM tree WHERE parent="'.$parent.'"');
$count = array(0=>0);
while ($row = mysql_fetch_array($result))
{
$data= str_repeat(' ',$level).$row['title']."\n";
echo $data;
$count[0]++;
$children= $this->display_children($row['title'], $level+1);
$index=1;
foreach ($children as $child)
{
if ($child==0)
continue;
if (isset($count[$index]))
$count[$index] += $child;
else
$count[$index] = $child;
$index++;
}
}
return $count;
}
Run Code Online (Sandbox Code Playgroud)
请注意,我很难调试代码,因为我没有你的桌子。如果有任何错误请告诉我,我会修复它。无论如何,结果将是一个数组,其中应包含由索引指定的级别数量:
$result=display_children("Food", 0) ;
var_export($result);//For exact info on all levels
echo $result[0];//First level, will output 2
echo $result[1];//Second level, will output 4
echo $result[2];//Third level, will output 3
Run Code Online (Sandbox Code Playgroud)
顺便说一句,你的数据库中有拼写错误,id 10(牛肉)应该有父级“肉”而不是“节拍”,我猜。
如果您想查看测试页面,请点击这里。
| 归档时间: |
|
| 查看次数: |
2186 次 |
| 最近记录: |