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

时间:2015-04-17 17:02:53

标签: php recursion refactoring decoupling

我遇到了以下代码。它打印出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生成,一个函数用于求和。

问题

如何将其解耦?是否可以在不创建两个复制所有递归DB调用的函数的情况下完成它?

有关数据库的更多详情

数据库结构:表(id,price);没有父母的时候id == -1。否则,id指向父id

行数 - 比如平均约5-10个父项,每个项共有1到6个孩子(其中一些可能是约3个孩子,其中有1个子孩子自己)

1 个答案:

答案 0 :(得分:0)

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

  • 递归读取数据库
  • 累积从PHP结构中的DB读取的行
  • 以一个很好的数组
  • 将该结构提供给调用者

来电者

  • 运行迭代算法以使用数组中的值打印HTML,并单独使用
  • 总结定价信息。

瞧!

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