Я пробовал просить об этом раньше, но я не думаю, что правильно сформулировал вопрос, поэтому я разработал что-то, что дало мне результат, который я получил после, и теперь я надеюсь, что это поможет кто-нибудь Помогите мне.Ищите более элегантное решение этого цикла
Задача: У меня есть 10 предметов. Если вы покупаете 1, это 10 долларов. Я продаю вам второй за 9 долларов. Я продаю вам третий товар за $ 8. Я буду продолжать снимать деньги, пока мы не доберемся до $ 5/item, потому что это самый низкий, на который я его продам. Итак, если вы купите все 10, это обойдется вам в 65 долларов.
Это модель ценообразования, которую я пытаюсь достичь, за исключением значительно большего масштаба. Вместо кучи предметов, использующих доллары, я говорю о миллионах и использую доли монет.
Это мой текущий код:
<?php
function getCost($num_items)
{
$min_price = 0.002;
$max_price = 0.007;
$discount_range = 1000000;
$discount_per_additional_item = ($max_price - $min_price)/($discount_range - 1);
$price_per_unit = MAX($min_price, ($max_price - ($num_items - 1) * $discount_per_additional_item));
return $price_per_unit;
}
$array = [100, 1000, 10000, 100000, 200000, 300000, 400000, 500000, 600000, 700000, 800000, 900000, 1000000];
foreach ($array as $value)
{
$sum = 0;
for ($i = 0; $i < $value; ++$i)
$sum += getCost($i);
echo number_format($value) . ' | $' . number_format($sum) . "\n";
}
Какие результаты в:
100 | $1
1,000 | $7
10,000 | $70
100,000 | $675
200,000 | $1,300
300,000 | $1,875
400,000 | $2,400
500,000 | $2,875
600,000 | $3,300
700,000 | $3,675
800,000 | $4,000
900,000 | $4,275
1,000,000 | $4,500
Я использую $ массив в качестве проверки вменяемости, где в реальном мире, я бы просто вычислить для фактический номер, на который взимается клиент.
Мой вопрос: есть ли способ сделать это без использования цикла for? Что-то, может быть, более элегантно?
Я сделал пример онлайн: http://sandbox.onlinephpfunctions.com/code/47e270dbad8cbe16c9ea906ffd2dce098a52fbca
Что Вам не нравится в цикле for? Я не вижу в этом ничего плохого. – GrumpyCrouton
Вопрос: какова цель '$ sum' в вашем коде? почему результат '100' имеет значение« 1000 »? Если вы продаете игрушки '100', тогда этого значения должно быть достаточно, чтобы найти скидку на' 100', а если вы продаете игрушки '100 000', то вам не нужно знать цену, по которой вы продали' 100', игрушек, чтобы рассчитать определенную цену игрушек «100 000». – Webeng
@GrumpyCrouton мне кажется, что OP связан с количеством циклов цикла, выполняемых на более высоких числах. –