Actually, it looks pretty straight-forward:

<?php

$points = array( 1, 2, 3, 5, 10, 15, 20, 25, 50, 100, 300, 500, 600,
1000000000 );
$prices = array();


function init_prices() {
    global $points, $prices;

    foreach($points as $val)
        $prices[$val] = "none";
}

function show_prices() {
    global $points, $prices;

    foreach($points as $val)
        echo "q$val: ".$prices[$val]."<br />";
}

function add_price_point($num, $price) {
    global $points, $prices;

    // this saves us from div-by-0 and automatically
    // discards invalid quantities
    if ($num < 1)
        return;

    $per = $price / $num;

    foreach($points as $val)
        if ($val >= $num)
            if (($prices[$val] == "none") or ($prices[$val] > $per))
                $prices[$val] = $per;
}


init_prices();

add_price_point($Quantity1, $Price1);
add_price_point($Quantity2, $Price2);
add_price_point($Quantity3, $Price3);

show_prices();

?>


> q1 q2 q3 q5 q10 q15 q20 q25 q50 q100 q300 q500 q600 q1000000000
> 0  0  0  0  .10 .10 .10 .10 .10 .10  .10  .10  .10  .10

Note that this is a messy and misleading way to do things:

1.  Having '0' as the price for un-valued quantities is dangerous, unless
you want to tell me that 4 or fewer items are free.  Note that in my code I
have replaced it with "none", which isn't much safer (it may get cast to 0)
but is a lot more obvious when debugging.

2.  What's with all these price points?  Surely it would be cleaner to keep
just the decision points in your database instead?

- what happens if you can get a cheaper price on 120 items (or on any
arbitrary number of items not in the list)?  Will you just defer it to the
next number of items (in my example, 300)?  Your customers might be
unhappy...



> Now the tricky part is $Quantity2 can either be blank or have a value
> and if $Quantity2 has a value then $Quantity3 can either be blank or have
a
> value

This is quite simply - let the function itself check whether it has been
passed a valid quantity - if not, return without doing anything.  Voila -
valid results and code that is easy to read.



-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to