function apply()
{
    global $cart;
    global $rawSequence;
    global $discount;
    global $couponExclude;
    $coupons = array_values(array_merge($cart['coupons']['pre'], $cart['coupons']['post']));
    for ($j = 0; $j < count($rawSequence); $j++) {
        for ($i = 0; $i < count($coupons); $i++) {
            if ($coupons[$i]['raw_type'] != $rawSequence[$j]) {
                continue;
            }
            switch ($coupons[$i]['type']) {
                case $discount['STORE_WIDE']:
                    store($cart, json_decode($coupons[$i]['params'], true), $coupons[$i]['raw_type'], $discount['STORE_WIDE']);
                    break;
                case $discount['CATEGORY_WIDE']:
                    category($cart, json_decode($coupons[$i]['params'], true), $discount['CATEGORY_WIDE']);
                    break;
                case $discount['BOGO']:
                    bogo($cart, json_decode($coupons[$i]['params'], true), $discount['BOGO'] | $discount['CATEGORY_WIDE']);
                    break;
                case $discount['GROUP_WISE']:
                    break;
                default:
            }
            array_splice($coupons, $i, 1);
            $exclude = $couponExclude[$rawSequence[$j]];
            for ($k = 0; $k < count($exclude); $k++) {
                for ($l = 0; $l < count($coupons); $l++) {
                    if ($coupons[$l]['raw_type'] != $exclude[$k]) {
                        continue;
                    }
                    array_splice($coupons, $i, 1);
                    $l--;
                }
            }
            $i = -1;
        }
    }
    return $cart;
}
Exemple #2
0
    Maurício Sipmann (sipmann@gmail.com)
Tipo: 
	sorting
Descrição: 
	Ordena um array a fim de ficar em ordem crescente.
Complexidade:
	O(infinito)
Dificuldade:
	facil
Referências:
	http://pt.wikipedia.org/wiki/Bogosort
*/
function bogo($valores)
{
    $ordenado = false;
    $certo = $valores;
    sort($certo);
    $i = 0;
    while (!$ordenado) {
        shuffle($valores);
        if ($valores == $certo) {
            $ordenado = true;
        }
        $i++;
        echo "Tentativa " . $i . " <br>";
        print_r($ordenado == true ? $valores : "");
    }
}
// Passando um array com valores a serem ordenados
bogo(array(3, 5, 2, 1));