par
dix2 » 22 sept. 2012, 17:53
c'est mieux comme ça

:
<?PHP
// 1 pizza offerte pour FREQUENCE pizzas achetées
// ex : si FREQUENCE = 3, 1 pizza offerte pour 3 pizzas achetées
define('FREQUENCE', 3);
/**************** début déclaration des fonctions ****************/
/**
* renvoie la liste des pizzas triée en fonction du prix et par ordre décroissant
* @param array $liste_pizzas_simple
* @return array
*/
function trie_liste_pizzas ($liste_pizzas_simple) {
foreach ($liste_pizzas_simple as $key => $row) {
$prix[$key] = $row['prix'];
}
array_multisort($prix, SORT_DESC, $liste_pizzas_simple);
return $liste_pizzas_simple;
}
/**
* renvoie un tableau composé de la fréquence "promotionnelle" et de la liste des pizzas augmentée des informations nécessaires pour gérer les pizzas offertes
* @param array $liste_pizzas_simple
* @param int $frequence
* @return array
*/
function manage_free_pizza ($liste_pizzas_simple, $frequence = FREQUENCE) {
$commande = array('frequence' => $frequence, 'liste_pizzas_advanced' => trie_liste_pizzas($liste_pizzas_simple));
$offert = 0;
foreach ($commande['liste_pizzas_advanced'] as &$pizza) {
if ($pizza['nbre'] % $frequence) {
$pizza['offert'] = (++$offert == $frequence) ? 1 : 0;
$offert = $offert % $frequence;
}
else {
$pizza['offert'] = 0;
}
}
unset($pizza);
return $commande;
}
/**
* calcule la remise
* @param array $commande
* @return int
*/
function calcule_remise ($commande) {
$remise = 0;
foreach ($commande['liste_pizzas_advanced'] as $pizza) {
$remise += $pizza['prix'] * (floor($pizza['nbre'] / $commande['frequence']) + $pizza['offert']);
}
return $remise;
}
/**
* renvoie la liste des pizzas offertes
* @param array $commande
* @return array
*/
function create_liste_free_pizzas ($commande) {
$liste_free_pizzas = array();
foreach ($commande['liste_pizzas_advanced'] as $pizza) {
if ($pizza['nbre'] >= $commande['frequence'] || $pizza['offert']) {
$liste_free_pizzas[] = array('idproduit' => $pizza['idproduit'], 'nbre' => floor($pizza['nbre'] / $commande['frequence']) + $pizza['offert']);
}
}
return $liste_free_pizzas;
}
/***************** fin déclaration des fonctions *****************/
$liste_pizzas_simple[] = array('idproduit' => 12, 'prix' => 8, 'nbre' => 1);
$liste_pizzas_simple[] = array('idproduit' => 11, 'prix' => 6, 'nbre' => 2);
$liste_pizzas_simple[] = array('idproduit' => 18, 'prix' => 14, 'nbre' => 4);
$liste_pizzas_simple[] = array('idproduit' => 19, 'prix' => 7, 'nbre' => 3);
$liste_pizzas_simple[] = array('idproduit' => 15, 'prix' => 10, 'nbre' => 6);
$commande = manage_free_pizza($liste_pizzas_simple);
//var_dump($commande);
echo('la remise est de : '.calcule_remise($commande).' euros<br /><br />');
$liste_free_pizzas = create_liste_free_pizzas($commande);
//var_dump($liste_free_pizzas);
echo('les pizzas offertes sont :');
echo('<ul>');
foreach ($liste_free_pizzas as $pizza) {
echo('<li>'.$pizza['nbre'].' pizza(s) dont l\'id est '.$pizza['idproduit'].'</li>');
}
echo('</ul>');
soit tu modifies la constante FREQUENCE
soit tu appelles la fonction manage_free_pizza comme ceci :
$commande = manage_free_pizza($liste_pizzas_simple, 2); // 1 pizza offerte pour 2 achetées
en fait, la constante FREQUENCE définit la valeur par défaut
alors qu'appeler la fonction manage_free_pizza avec le 2ème paramètre permet de définir une commande avec une opération promotionnelle ponctuelle
@+
dix2
c'est mieux comme ça :wink: :
[php]
<?PHP
// 1 pizza offerte pour FREQUENCE pizzas achetées
// ex : si FREQUENCE = 3, 1 pizza offerte pour 3 pizzas achetées
define('FREQUENCE', 3);
/**************** début déclaration des fonctions ****************/
/**
* renvoie la liste des pizzas triée en fonction du prix et par ordre décroissant
* @param array $liste_pizzas_simple
* @return array
*/
function trie_liste_pizzas ($liste_pizzas_simple) {
foreach ($liste_pizzas_simple as $key => $row) {
$prix[$key] = $row['prix'];
}
array_multisort($prix, SORT_DESC, $liste_pizzas_simple);
return $liste_pizzas_simple;
}
/**
* renvoie un tableau composé de la fréquence "promotionnelle" et de la liste des pizzas augmentée des informations nécessaires pour gérer les pizzas offertes
* @param array $liste_pizzas_simple
* @param int $frequence
* @return array
*/
function manage_free_pizza ($liste_pizzas_simple, $frequence = FREQUENCE) {
$commande = array('frequence' => $frequence, 'liste_pizzas_advanced' => trie_liste_pizzas($liste_pizzas_simple));
$offert = 0;
foreach ($commande['liste_pizzas_advanced'] as &$pizza) {
if ($pizza['nbre'] % $frequence) {
$pizza['offert'] = (++$offert == $frequence) ? 1 : 0;
$offert = $offert % $frequence;
}
else {
$pizza['offert'] = 0;
}
}
unset($pizza);
return $commande;
}
/**
* calcule la remise
* @param array $commande
* @return int
*/
function calcule_remise ($commande) {
$remise = 0;
foreach ($commande['liste_pizzas_advanced'] as $pizza) {
$remise += $pizza['prix'] * (floor($pizza['nbre'] / $commande['frequence']) + $pizza['offert']);
}
return $remise;
}
/**
* renvoie la liste des pizzas offertes
* @param array $commande
* @return array
*/
function create_liste_free_pizzas ($commande) {
$liste_free_pizzas = array();
foreach ($commande['liste_pizzas_advanced'] as $pizza) {
if ($pizza['nbre'] >= $commande['frequence'] || $pizza['offert']) {
$liste_free_pizzas[] = array('idproduit' => $pizza['idproduit'], 'nbre' => floor($pizza['nbre'] / $commande['frequence']) + $pizza['offert']);
}
}
return $liste_free_pizzas;
}
/***************** fin déclaration des fonctions *****************/
$liste_pizzas_simple[] = array('idproduit' => 12, 'prix' => 8, 'nbre' => 1);
$liste_pizzas_simple[] = array('idproduit' => 11, 'prix' => 6, 'nbre' => 2);
$liste_pizzas_simple[] = array('idproduit' => 18, 'prix' => 14, 'nbre' => 4);
$liste_pizzas_simple[] = array('idproduit' => 19, 'prix' => 7, 'nbre' => 3);
$liste_pizzas_simple[] = array('idproduit' => 15, 'prix' => 10, 'nbre' => 6);
$commande = manage_free_pizza($liste_pizzas_simple);
//var_dump($commande);
echo('la remise est de : '.calcule_remise($commande).' euros<br /><br />');
$liste_free_pizzas = create_liste_free_pizzas($commande);
//var_dump($liste_free_pizzas);
echo('les pizzas offertes sont :');
echo('<ul>');
foreach ($liste_free_pizzas as $pizza) {
echo('<li>'.$pizza['nbre'].' pizza(s) dont l\'id est '.$pizza['idproduit'].'</li>');
}
echo('</ul>');
[/php]
soit tu modifies la constante FREQUENCE
soit tu appelles la fonction manage_free_pizza comme ceci :
$commande = manage_free_pizza($liste_pizzas_simple, 2); // 1 pizza offerte pour 2 achetées
en fait, la constante FREQUENCE définit la valeur par défaut
alors qu'appeler la fonction manage_free_pizza avec le 2ème paramètre permet de définir une commande avec une opération promotionnelle ponctuelle
@+
dix2