Как отделить код, который генерирует HTML и выполняет рекурсивное суммирование в одной и той же функции?

Я наткнулся на следующий код. Выводит HTML (используя partial функция ZF2), в то же время вычисляя сумму для всех элементов, рекурсивно.

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 и одной для суммирования.

Вопрос

Как я могу сделать это отделенным? Можно ли сделать это без создания по существу двух функций, которые дублируют все рекурсивные вызовы БД?

Подробнее о БД

Структура базы данных: таблица (id, цена); id == -1 когда нет родителя. Иначе, id указывает на родителя id,

Количество строк — скажем, в среднем около 5-10 родительских элементов, каждый из которых имеет от 1 до 6 детей (некоторые из них могут быть, например, около 3 детей с 1 собственным дочерним ребенком)

2

Решение

Я ищу решение, которое:

  • рекурсивно читает БД
  • накапливает строки, прочитанные из БД в структуре PHP
  • обеспечивает эту структуру обратно вызывающей стороне в хороший массив

Звонящий чем

  • запускает итеративный алгоритм для печати HTML со значениями из массива и отдельно
  • информация о ценах.

Вуаля!

— код может быть добавлен после того, как он написан —

(это в основном то же самое, но вместо $ total я накапливаю $ childRows)

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]