Задать вопрос
PageUp
@PageUp
Default

Как рассчитать нужное число по нескольким условиям?

Здравствуйте. Это на мой взгляд очень сложная задача. Что бы минимально нагрузить процессом выполнения сервер, но выполнить условие. У меня все сводится к повторяемым циклам, до нужного результата, но не думаю, что это хорошее решение. Может есть какие то более простые способы. Как говорится, все гениальное просто, но до этого еще додуматься нужно.

В общем. Задача такая. Есть Число. Переменная $Maxkolvo. Она меняется по разному и может быть 100 и выше, ну к примеру возьмем $Maxkolvo=15.

Есть неограниченное количество других переменных. Чаще всего от двух до четырех.

$file_in = file($file);
$rbase=explode(",", $p_data[9]);
for ($ir = 0; $ir < count($rbase); $ir++){
$rs=explode(":", $rbase[$ir]);
$rs[0]=trim($rs[0]);
for ($id = 0; $id < count($file_in); $id++){
$in_data = explode("|", $file_in[$id]);
if($in_data[0]==$rs[0]){ // находим нужное (искомый ид)

//Тут функцией удаляем из $file_in ($in_data[6]-$rs[1];)

}}
}


Все бы ничего. Цикл пройдется сколько нужно раз, и удалит столько, сколько требуется. Отнимет.
Но этот цикл это единичное действие, а проверок таких должно быть на $Maxkolvo. В данном случае 15. До тех пор, пока одна из ячеек ($in_data[6]) не приобретет значение 0. Тогда на этом все заканчивается.

$rs[1] может быть разным числом. Где то он 1, где то 4. Если $rs[1]>$in_data[6] то означает, что на этом финал.

Эх, это даже трудно объяснить, не говоря о том, что бы выразить в виде кода.

К примеру так. Есть Корзина в которой различные овощи и фрукты. Их можно взять от туда, смешать и получить салат. На салат требуется определенное количество разных овощей. К примеру Огурец:1, помидор: 2, лук: 1, укроп:4.

В корзине имеется Огурец: 15, помидор 30, лук: 40, укроп: 8.

За раз я могу сделать не более 15 салатов: $Maxkolvo

Для этого идет цикл с проверкой нужных овощей в корзине. $in_data[0]- Название овоща в корзине. $rs[0] - Название требуемого овоща.
В цикле находим нужный овощ, который есть в корзине.

if($in_data[0]==$rs[0]){

Количество овоща в корзине это $in_data[6], количество требуемого на салат это $rs[1].

Отнимем в корзине нужное кол-во.

$in_data[6]-$rs[1];

Я должен израсходовать ровно столько сколько требуется, если овощей меньше чем нужно, то столько, сколько смогу. Лишнее остается. Видно что укропа требуется 4. А есть 8. То есть в итоге я смогу сделать 2 салата лишь.

Если бы всего было в избытке в корзине, то максимально мог бы сделать 15 ($Maxkolvo). Очень надеюсь что понятно объяснил эту нелегкую задачу. Я сегодня уже весь день голову ломаю.
  • Вопрос задан
  • 224 просмотра
Подписаться 1 Сложный Комментировать
Помогут разобраться в теме Все курсы
  • Skillfactory
    Профессия Fullstack веб-разработчик на JavaScript и PHP
    20 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Решения вопроса 1
syamskoy
@syamskoy
Все просто. Делим и получаем минимальное возможное число продуктов на салат.

<?php

const TOMATO = 'tomato';
const CARROT = 'carrot';
const APPLE = 'apple';
const POTATO = 'potato';

$basket = [
    TOMATO => 15,
    POTATO => 10,
    CARROT => 5,
    APPLE => 16,
];

$salad = [
    TOMATO => 3,
    POTATO => 2,
    CARROT => 1,
];

function calculate(array $basket, array $salad): int
{
    $total = max($basket);

    foreach ($salad AS $key => $value) {
        if ($value === 0) {
            continue;
        }
        $total = min(floor(($basket[$key] ?? 0) / $value), $total);
    }

    return $total;
}

echo calculate($basket, $salad) . PHP_EOL;

Total: 5
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Raff85
Тебе нужно показать сколько овощей не хватает для $Maxkolvo салатов или показать сколько можно сделать из текущих остатков овощей?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
от 200 000 до 290 000 ₽