如何分离生成 HTML 并在同一函数中进行递归求和的代码?

How to decouple code that generates HTML and does recursive summation in same function?

我遇到了以下代码。它打印出 HTML(使用 ZF2 的 partial 函数),同时还递归地计算所有项目的总数。

function gen_items($parentId)
{
    $total = 0;
    $rows = $this->db->getData($parentId); //DB call!
    foreach($rows as $row)
    {
        $id = $row['id']
        $price = $row['price'];

        echo $this->partial('item.phtml', array('price'=> $price));

        $total += $price + $this->gen_items($id);
    }

    return $total;
}

首先,我认为这是一个问题,因为名称 gen_items 对于为行项目生成 HTML 代码是有意义的,但它对事物求和没有意义。

我的一个想法是制作一个重复的函数来完成所有相同的事情,除了一个函数用于 HTML 生成,一个用于求和。

问题

我怎样才能使它解耦?是否可以在不创建本质上复制所有递归数据库调用的两个函数的情况下做到这一点?

有关数据库的更多详细信息

数据库结构:table(id, price); id == -1 当没有 parent 时。否则,id 指向 parent id.

行数 - 比如说平均大约 5-10 parent 项,每项总共有 1 到 6 children(其中一些可能是大约 3 children 和 1 sub-child 自己的)

我正在寻求一种解决方案:

  • 递归读取数据库
  • 在PHP结构中累积从数据库读取的行
  • 在一个漂亮的数组中将该结构返回给调用者

来电者比

  • 运行迭代算法以使用数组中的值打印 HTML,并且分别
  • 汇总定价信息。

瞧!

---代码写完后可能会添加--
(基本相同,但我累积了 $childRows 而不是 $total)