Ik heb een aantal selectievelden waarbij mensen aantallen kunnen selecteren.
Na het posten worden deze aantallen opgeteld en in $totaal gezet.


Nu geldt er een 2e halve prijs actie en wil ik het volgende doen:

Product kost 6 euro

Iemand koopt 1 product: 6 euro
Iemand koopt 2 producten: 9 euro


Dat doe ik zo:

if($_GET['aktiemechanisme'] == 2) {

if (0==($aantal%2))
{
$aantal = $aantal *0.75;

}


Dat werkt, maar als iemand er nu 3 koopt, krijg je: 18 euro
Terwijl ik dan graag zou willen zien dat hij zegt: 15 euro (dus hier wordt 1x 2e halve prijs toegepast, de 3e is het hele bedrag boven op die 9 euro.)

Nu telt het script bij 3 stuks 3x de volle prijs en bij de 4e pas weer de aktie toe te passen.


Enig idee hoe ik dit oplos?
je moet natuurlijk wel de korting op het goedkoopste artikel doen hé.

Antwoord op je probleem;

<?php
$goedkoopsteprijs = 10.15; // @todo; mysql MIN() of de php variant: http://nl1.php.net/min
$aanbiedingsprijs = number_format($goedkoopsteprijs / 2, 2); // ervoor zorgen dat 10.15 / 2 geen 5.075 wordt maar netjes 5.08
?>
Volgens mij is dat niet precies wat Patrick wil weten. Hij wil weten wat de formule is die weergeeft dat ieder tweede (zelfde) artikel de helft kost. Die formule is:

<?php
$totaalprijs = (ceil($aantal/2) * $prijs) + ($floor($aantal/2) * ($prijs/2));
?>

Voorbeeld:

<?php
$prijs = 6.0;
$halveprijs = $prijs / 2;
echo "<table>\n";
echo "  <tr>\n";
echo "    <th>Aantal</th>\n";
echo "    <th>Aantal hele prijs</th>\n";
echo "    <th>Aantal halve prijs</th>\n";
echo "    <th>Totaal prijs</th>\n";
echo "  </tr>\n";
for ($i=1; $i<7; $i++) {
	$aantalheleprijs = ceil($i/2);
	$aantalhalveprijs= floor($i/2);
	$totaalprijs = ($aantalheleprijs * $prijs) + ($aantalhalveprijs * $halveprijs);
	echo "  <tr>\n";
	echo "    <td>$i</td>\n";
	echo "    <td>$aantalheleprijs</td>\n";
	echo "    <td>$aantalhalveprijs</td>\n";
	echo "    <td>$totaalprijs</td>\n";
	echo "  </tr>\n";
	}
echo "</table>\n";
?>

(Ik hoop niet dat iemand gaat zeuren over dat de strings gesplitst moeten worden, daar gaat het niet om in dit voorbeeld. Bovendien doe ik het precies zoals php.net het beschrijft.)
Wat jij doet klopt niet, dit zal beter gaan:
<?php
$totaalprijs = (floor($aantal/2) *($prijs/2)) + (($aantal % 2) * $prijs);
?>
Met alle respect ben ik het niet met je eens, Ger. Probeer jouw formule maar eens in mijn voorbeeld op te nemen (heb ik gedaan): hij geeft gewoon niet de juiste resultaten. Mijn formule wel.

Aantal 	Aantal hele prijs 	Aantal halve prijs 	Totaal prijs 	Ger
1 	1 	0 	6 	6
2 	1 	1 	9 	3
3 	2 	1 	15 	9
4 	2 	2 	18 	6
5 	3 	2 	24 	12
6 	3 	3 	27 	9

(Sorry voor de knullige layout, maar de rechtse kolom is het resultaat van jouw formule. die daarvoor is de mijne.)
Sorry, je hebt gelijk, ik heb niet goed gekeken, het is niet 2 voor de prijs van 1, maar 2e halve prijs.
In het eerste geval moet de formule dit zijn:
<?php
$totaalprijs = ((floor($i/2) * $prijs) + (($i % 2) * $prijs));
?>

In het tweede geval jouw formule.

Reageren