Я наткнулся на следующий код. Выводит 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 собственным дочерним ребенком)
Я ищу решение, которое:
Звонящий чем
Вуаля!
— код может быть добавлен после того, как он написан —
(это в основном то же самое, но вместо $ total я накапливаю $ childRows)
Других решений пока нет …