2016-05-27 14 views
0

Ich versuche, etwas Mathe zu tun, um freie Artikel in php auf meine Shop-Kasse auszuarbeiten.php mathematische Berechnungen geben keine korrekten Ergebnisse

Hier ist mein Code:

$bugofq = $cart_item['quantity'] * get_free_quantity($cart_item['product_id']); 

$deal['freequantity'] = 10; 
$deal['itemquantity'] = 5; 

if($deal['freequantity'] >= 1 && $deal['itemquantity'] >= 1 && $cart_item['quantity'] > $deal['itemquantity']){ 
    $bugofq = $cart_item['quantity'] + $deal['freequantity']; 
} 

Also im Grunde ich meine Datenbank bin abfragt, um zu sehen, ob ein bestimmtes Produkt vorhanden ist. Wenn dies der Fall ist, überprüfe ich, ob irgendwelche Angebote vorhanden sind.

Das obige Beispiel hat ein Angebot von "Kaufen Sie 5 Produkte, erhalten 10 frei".

Meine if-Anweisung oben berechnet dies richtig, so dass die Gesamt Produkte ist dann 15.

jedoch, wenn ich 10 Artikel meinem Warenkorb i mit insgesamt 30 Produkte sollten am Ende (5 + 10 + 5 + 10 = 30), aber ich lande mit 20. Das passiert auch, wenn ich eine beliebige Menge der 5 hinzufüge. Wenn ich also 20 Produkte zu meinem Warenkorb hinzufüge, würde ich erwarten, 60 zu sehen, die ursprünglichen 20 und 40 frei, Bu ti Ende up mit 30

gibt es etwas offensichtlich falsch mit meiner oben cal

+0

wenn 5 Produkt wird dann insgesamt Produkt im Warenkorb (5 + 10 (frei)) = 15, und wenn 10 Produkt wird dann das Gesamtprodukt im Warenkorb (10 + 10 (gratis für die ersten 5) + 10 (gratis für die nächsten 5)) = 30? –

+0

Hat eine der Antworten Ihre Anforderungen erfüllt? Wenn ja, könnten Sie die Antwort Ihrer Wahl als akzeptiert markieren oder einen Kommentar abgeben? – trincot

Antwort

0

In Ihrem allen beschriebenen Fällen Ihre wenn auswertet Aussage Bedingung true, so folgenden Code $bugofq = $cart_item['quantity'] + $deal['freequantity']; läuft und als Ergebnis wird $deal['freequantity'] zu $cart_item['quantity'] nur einmal addiert, dh in Ihrem Fall wird es immer 10 zum Wert hinzufügen, warum für 5 erhalten Sie 15, für 10 erhalten Sie 20 statt 30, für 20 Sie erhalten 30 statt 60.

Für eine korrekte Berechnung sollten Sie den Multiplikator $c= floor($cart_item['quantity']/$deal['itemquantity']) berechnen. $c zeigt, wie oft Sie das Paket mit freien Elementen anwenden sollten, daher wäre das Ergebnis $bugofq = $cart_item['quantity'] + ($c * $deal['freequantity']);.

0

Die Formel Sie haben nur Konten für einmalige Addition der freien Zählung. Um es richtig zu machen, müssen Sie sehen, wie oft diese Addition angewendet werden sollte. Dies können Sie mit dem folgenden Code tun:

$bugofq = $cart_item['quantity']; // default case 
if($deal['itemquantity'] >= 1){ // deal present 
    $bugofq += $deal['freequantity'] * 
      intdiv($cart_item['quantity'], $deal['itemquantity']); 
} 
Verwandte Themen