Здравствуйте. Делаю небольшой студенческий проект и у меня возникла трудность которую я не могу разрешить без сторонней помощи. В проекте мне нужно в блюдо добавлять продукты из которых это блюдо состоит и на странице должна рассчитываться пищевая ценность блюда, в зависимости от вида обработки (Например у сырой картошки (условно) пищевая ценность: 0.6, вид обработки: варить, коэффициент для варёной картошки 2, тогда 0.6 * 2 = 1.2, далее складываем следующий продукт и т.д.). С этим у меня трудностей нет, трудность в том, что блюдо может состоять из других блюд и тогда это получается структура вида "дерево", в которой может быть любая вложенность. Я вытаскиваю данные из базы путём рекурсивной функции и, например, сначала картошку сварили, потом пожарили, а потом запекли (условно), т.е. блюдо состоит из 3-х вложенных блюд и у каждого своей коэффициент обработки. Допустим пищевая ценность сырой картошки 1, коэффициент для варки картошки 2, для жарки 3, для запекания 4. Т.е. Сначала мы варим: 1 * 2 = 2, потом жарим варёную картошку: 2 * 3 = 6, потом запекаем жареную (до этого варёную) картошку: 6 * 4 = 24;
У меня не получается так перемножить все вложенности, у меня получается что каждая вложенность умножается только на коэффициент обработки своего уровня, но не перемножается с верхним по иерархии коэффициентом.
Вот моя неправильная функция:
function tree($id_blud, $level)
{
static $arr = array(); // статическая переменная в которой накапливается пищевая ценность
static $ko = array(); // статическая переменная в которой сохраняются коэффициенты обработки вложенных блюд
$data = $this->getmysqldata('tree', $id_blud); // данные о продуктах в выбранном блюде
$max = count($data); // количество продуктов в блюде
for ($i = 0; $i < $max; $i++) { // проходим каждый продукт в блюде
$data_recalc = $this->getmysqldata('recalculation', $id_blud, $data[$i]['id_prod'], $data[$i]['id_obrab']); // пищевая ценность i-го продукта
echo "<div style='margin-left: " . ($level * 25) . "px;'>" . $data[$i]['nazv_prod'] . "</div>";
if ($level == 0) // если вложенности нет
for ($j = 0; $j < 13; $j++)
$arr[$j] += $data_recalc[$j]['recalc']; // складываем пищевую ценность для каждого пищевого элемента (всего их 13: белки, жиры, углеводы, натрий, калий и т.д.) в статическую переменную $arr
if ($level > 0 and $data[$i]['vid'] == 0) // если больше одного уровня вложенности, т.е. если блюдо в блюде, и это продукт, а не блюдо
for ($j = 0; $j < 13; $j++)
$arr[$j] += ($data_recalc[$j]['recalc'] * $ko[$level][$j]['ko_blud']); // складываем пищевую ценность для каждого пищевого элемента умноженного на коэффициент обработки вложенного блюда
if ($data[$i]['vid'] == 1) { // если данный продукт является блюдом, то рекурсивно вызываем данную функцию и получаем коэффициенты обработки данного вложенного блюда
$level++; // уровень вложенности
$ko[$level] = $this->getmysqldata('tree2', $data[$i]['id_obrab']); // получаем коэффициенты обработки вложенного блюда для каждого пищевого элемента
$this->tree($data[$i]['id_prod'], $level); // рекурсивно вызываем данную функцию
$level--; // уровень вложенности
}
}
return $arr; // возвращаем пищевую ценность всего блюда
}
У вас тут кажется не правильно.
$this->tree($data[$i]['id_prod'], $level); // рекурсивно вызываем данную функцию
Вам нужно вашей функцией сделать входящий параметр или же ссылкой &
или же когда он возращает данные их присваивать куда-то
Виртуальный выделенный сервер (VDS) становится отличным выбором
Здравствуйте,у меня такой вопросМожно ли передать переменную из Middleware в Controller
От 5 символов, можно использовать *-? и цифрыКак это прописать ? [A-Za-z0-9]{5,} как еще *-? дописать ?