2010-11-26 3 views
1

Я работаю на ценовой оценки, которые являются based on the following array:PHP: Рассчитать разницу между значениями массива?

$items = 7; 

$margins = array(
    1 => 140, // Base price 
    3 => 120, 
    5 => 100, 
    10 => 60); 

Выполнив следующую строку, я получаю значение ближайшие:

$margin = $margins[max(array_intersect(array_keys($margins),range(0, $items)))]; 

echo $margin; // Outputs 100' 

Однако, если эта функция будет работать на массив с большим пространством между каждым значением, ближайшее значение будет действительно далеко от предыдущего, что приведет к цене, которая, вероятно, заставит клиента грустить ...

Как я могу получить более точный результат из этого - как если бы я вручную заполнил пробелы в массиве полей, чтобы покрыть все потенциальные количества элементов (что, безусловно, неэффективно)?

Благодаря

+0

Не следует ли это выражать, используя какой-то расчет с участием процентов? – deceze 2010-11-26 09:10:45

+0

К сожалению, для этого расчета не определено постоянное процентное значение ... – Industrial 2010-11-26 09:12:02

+1

@ Промышленный: если у вас нет правила создания этих цен, то мы не можем вам помочь. Например, можно сказать, что цена уменьшается линейно. Или квадратично, или экспоненциально ... – NikiC 2010-11-26 09:20:45

ответ

0

Вы можете получить список всех номеров с чем-то вроде range(1, 10). Затем цикл через и заполнить пробелы :)

0

Когда вы пишете 1 => 140, 3 => 120, 5 => 100, 10 => 60 я предполагаю, вы имеете в виду «от 5 до 9, каждая деталь стоит 100», так что покупке 7 пунктов стоит 7x100 = 700. Если это так, то вы можете просто пройти весь массив один раз и получить в результате каждого товара цены:

function get_price($prices,$real_qty) 
{ 
    foreach ($prices as $qty => $price) 
    if ($qty <= $real_qty) $real_price = $price; 
    else break; 
    return $real_price * $real_qty; 
} 

Если цены были отсортированы по количеству (с использованием ksort, например), то эта функция будет возвращать общая цена за предоставленное количество, делая очень мало работы: в худшем случае он будет рассматривать каждый элемент в массиве цен один раз, и у вас, вероятно, будет только десяток элементов в этом массиве.

С другой стороны, если вы думаете, что покупка 7 предметов должна стоить чего-то иного, чем 700, то вы должны объяснить, сколько это должно стоить и почему, потому что это не очевидно из данных проблемы.

Смежные вопросы