Php 如何计算foreach循环递归中的行?

Php 如何计算foreach循环递归中的行?,php,mysql,recursion,foreach,Php,Mysql,Recursion,Foreach,下面的代码返回类别树 如何获得每个类别中有子类别的产品数量?我的意思是对每个子类别中的值求和 到目前为止,我只成功获得了最后一级子类别的计数: function menuList($data, $parent = 0 ){ static $i = 1; $tab = str_repeat(' ',$i); if($data[$parent]){ $html = $tab.'<ul id="menu'.$i.'">'; $i++;

下面的代码返回类别树

如何获得每个类别中有子类别的产品数量?我的意思是对每个子类别中的值求和

到目前为止,我只成功获得了最后一级子类别的计数:

function menuList($data, $parent = 0 ){
    static $i = 1;
    $tab = str_repeat(' ',$i);
    if($data[$parent]){
        $html = $tab.'<ul id="menu'.$i.'">';
        $i++;
        $count=0;

        foreach($data[$parent] as $v){
            $id = $v->id;
            $categoryname=$v->bg_category;
            if(in_array($id, $_SESSION['active_product_categories'])){
                 $q='select distinct product_id from products_to_categories where category_id="'.$id.'"';
                 $res=mysql_query($q) or die());
                 $num_rows=mysql_num_rows($res);
                 $count='( '.$num_rows.' )';
            }
            $child = menuList($data, $v->id);
            $html .= $tab.'<li>';
            $html .= '<a href="'.$v->WebSite.'/shop/index.php?offers='.$id.'">'.$categoryname.' '.$count.' </a>';

            if($child){
                $i–;
                $html .= $child;
                $html .= $tab;
            }
            $html .= '</li>';
        }
        $html .= $tab.'</ul>';
        return $html;
    } else {
        return false;
    }
}

$query = mysql_query('select * from products_categories where visible="1" group by bg_category order by bg_category ASC');

while($r=mysql_fetch_object($query)){
    $data[$r->parent][] = $r;
}

$menu = menuList($data);
echo $menu;
函数菜单列表($data,$parent=0){
静态$i=1;
$tab=str_重复(“”,$i);
如果($data[$parent]){
$html=$tab.“
    ”; $i++; $count=0; foreach($data[$parent]作为$v){ $id=$v->id; $categoryname=$v->bg\u类别; if(在_数组($id,$_会话['active_product_categories'])中){ $q=“从产品类别中选择不同的产品”id,其中类别“id=”.$id.“”; $res=mysql\u query($q)或die()); $num\u rows=mysql\u num\u rows($res); $count='(“$num_行”); } $child=menuList($data,$v->id); $html.=$tab.“
  • ”; $html.=''; if(儿童){ $i–; $html.=$child; $html.=$tab; } $html.='
  • '; } $html.=$tab.“
”; 返回$html; }否则{ 返回false; } } $query=mysql\u query('select*from products\u categories where visible=“1”group by bg\u category order by bg\u category ASC'); while($r=mysql\u fetch\u object($query)){ $data[$r->parent][]=$r; } $menu=menuList($data); echo$菜单;
请看一下屏幕截图

以下是截图:


如果我是你,我会尝试编写两个类,下面我添加了伪代码示例:

Class Menu
{
  private $aSubMenus
  public function __construct()
  public function getNumberOfItems()
  public function addMenuItem()
  public function getHTML()
  public function load($menuID)
}

Class MenuItem
{
  public function __construct()
  public function getHTML()
}

我不知道您的表的结构,但为什么不在SQL中修复它:

  $q = 'SELECT parent_id, parent_name, count(child_id) FROM your_table GROUP BY parent_id';
然后才建立HTML视图。
此代码非常近似。

菜单列表的功能在哪里完成?因为我看不到它的结束曲括号对不起,我没有名声添加sreenshot,但基本菜单类别是这样的:电子产品?计数->手机?计数->手机(10)智能手机(20)手机的总数应该是30,电子产品也应该是30,但我不能显示它..就在最后一次查询之前,而。。这是截图Erik你能在代码中实现它来告诉我怎么做吗?谢谢。。这是一个很大的要求,我会添加一些伪代码来帮助您的方式:我已经改变了我的答案,包括一些我会使用的伪代码。。如果将加载和数据收集与html生成分开,问题就会简单得多。Yarren,我不想计算子类别。我想在分类中计算产品,我只在最后一个深层子分类中计算。。请看sreen shot链接……是的,我看到了。在DB中,从DB中计算条目这样的事情要容易得多。通过这种方式,您可以计算您想要的任何内容,包括每个类别中的项目。Yarren,我可以并且我确实可以使用此查询对类别中的产品进行计数:$q='select distinct product_id from products_to_categories,其中category_id=“'.$id.”;但它直接将产品与类别联系起来。。如何将所有子类别的产品相加并将其添加到母类别。。这就是问题所在,我相信所有需要的信息都在上面公布了。。如果需要的话,我可以提供额外的表格。你能提供你的表格结构吗?Yarren,基本上涉及3个表格:1。产品类别2。产品3。您需要哪一种产品?