Я работаю на модуль доставки для вина, и было интересно, если кто-то может дать мне руку - в основном:PHP - самая низкая стоимость на основе случае размеры
Вино может быть погружено в случаях 8, 12 или 15 бутылок, каждая со своей ценой. Модуль должен принять общее количество бутылок в заказе и разработать, какая комбинация случаев дает самую низкую цену. Например, в порядке, равном 31 бутылке, самая низкая цена составляет 1 случай 15 и два случая 8 (вместо 2 случаев 15 и 1 из 8, или 2 из 12 и один из 8). В настоящее время у меня есть следующий, который почти работает, но пропускает несколько возможных комбинаций
foreach ($rates as $case_size => $case_price)
{
$price = floor($total_bottles/$case_size) * $case_price;
$rem = $total_bottles % $case_size;
if($rem > 12)
{
//needs to use another case of 15
$price = $price + $rates[15];
}
elseif($rem > 8)
{
//needs an extra case of 12
$price = $price + $rates[12];
}
elseif($rem > 0)
{
//needs an extra case of 8
$price = $price + $rates[8];
}
$quotes[] = $price;
}
return min($quotes);
Кажется немного лишним. Если клиент А купил 27 бутылок, и программа выяснила, как вставить его, тогда у вас есть ответ для всех будущих клиентов, которые заказывают 27 бутылок. Нет необходимости пересчитывать снова и снова. Я бы использовал раскладной лист или что-то, чтобы узнать, что лучше всего работает, а затем использовать массив с параметрами. – RST
Я вижу вашу точку зрения, но в каждой стране есть свой набор ставок для каждого размера каждого случая, поэтому он становится немного сложным. На самом деле не нужно составлять таблицу для каждой страны для каждого возможного количества заказа. Конечно, это способ сделать это программно – Dave
Итак, сделайте поиск, используя количество бутылок и целевую страну в качестве входных данных.Не должно быть слишком сложно создать таблицу поиска. С другой стороны: действительно ли нужно оптимизировать это до максимума в пользу клиента? – Sven