par
naholyr » 13 déc. 2007, 12:06
mes commentaires et les nommages de variables ne correspondent pas en effet ^^ j'ai mélangé joyeusement deux méthodes en essayant de me souvenir de comment on avait réalisé le notre. En revanche ça reste juste il suffit de définir correctement le tableau pour coller exactement à l'exemple que tu as donné :
array(
2000 => 1,
5000 => 2,
10000 => 3,
// etc...
);
En effet c'est plutôt $tranche_haut que $tranche_bas, mais c'est super ça signifie que tu as parfaitement compris le déroulement de l'algo
Prenons un exemple déroulement Dans ton cas la tranche bas sera plutôt 2001 et 5001, ou un test avec "strictement inférieur". Vérifions avec un exemple à 2001 (qui devrait donc donner 2 en frais de port) :
- Premier passage : $tranche_haut = 2000, $fraisPort = 1. (2001 <= $tranche_haut) est faux, on continue
- Second passage : $tranche_haut = 5000, $fraisPort = 2. (2001 <= $tranche_haut) est vrai, on arrête et la valeur de $fraisPort est correctement définie à 2.
Cas limite : $poids = 15000
On va parcourir tout le tableau sans jamais s'arrêter, donc $fraisPort vaudra simplement al dernière valeur : 3, c'est bien le résultat attendu.
Le code fonctionne bien, simplement qu'il était camouflé derrière des commentaires et des noms de variable qui ne voulaient rien dire
Le voici corrigé :
// poids => frais de port, par ordre de poids croissant
$poids_fraisPort = array(
2000 => 1,
5000 => 2,
// etc...
);
foreach ($poids_fraisPort as $tranche_haut => $fraisPort) {
if ($poids <= $tranche_haut) {
break;
}
}
// $fraisPort = frais de port pour la tranche de poids
La version de Ryle est l'exact opposé, et fonctionne donc parfaitement également, on parcourt simplement dans un sens ou dans l'autre : tu peux donc choisir le sens en fonction du type de données que tu auras. Si tu as plutôt des données dans les tranches hautes il vaut mieux prendre le tableau décroissant, si tu as plutôt des données dans les tranches basses il vaut mieux prendre le tableau croissant.
Ainsi tu pourras économiser au moins un ou deux passages dans ta boucle par exécution du script, et économiser 4e-8 ms !! OK, je suis parti en live là.
mes commentaires et les nommages de variables ne correspondent pas en effet ^^ j'ai mélangé joyeusement deux méthodes en essayant de me souvenir de comment on avait réalisé le notre. En revanche ça reste juste il suffit de définir correctement le tableau pour coller exactement à l'exemple que tu as donné :
[php]array(
2000 => 1,
5000 => 2,
10000 => 3,
// etc...
);[/php]
En effet c'est plutôt $tranche_haut que $tranche_bas, mais c'est super ça signifie que tu as parfaitement compris le déroulement de l'algo ;)
Prenons un exemple déroulement Dans ton cas la tranche bas sera plutôt 2001 et 5001, ou un test avec "strictement inférieur". Vérifions avec un exemple à 2001 (qui devrait donc donner 2 en frais de port) :
- Premier passage : $tranche_haut = 2000, $fraisPort = 1. (2001 <= $tranche_haut) est faux, on continue
- Second passage : $tranche_haut = 5000, $fraisPort = 2. (2001 <= $tranche_haut) est vrai, on arrête et la valeur de $fraisPort est correctement définie à 2.
Cas limite : $poids = 15000
On va parcourir tout le tableau sans jamais s'arrêter, donc $fraisPort vaudra simplement al dernière valeur : 3, c'est bien le résultat attendu.
Le code fonctionne bien, simplement qu'il était camouflé derrière des commentaires et des noms de variable qui ne voulaient rien dire :lol:
Le voici corrigé :
[php]// poids => frais de port, par ordre de poids croissant
$poids_fraisPort = array(
2000 => 1,
5000 => 2,
// etc...
);
foreach ($poids_fraisPort as $tranche_haut => $fraisPort) {
if ($poids <= $tranche_haut) {
break;
}
}
// $fraisPort = frais de port pour la tranche de poids[/php]
La version de Ryle est l'exact opposé, et fonctionne donc parfaitement également, on parcourt simplement dans un sens ou dans l'autre : tu peux donc choisir le sens en fonction du type de données que tu auras. Si tu as plutôt des données dans les tranches hautes il vaut mieux prendre le tableau décroissant, si tu as plutôt des données dans les tranches basses il vaut mieux prendre le tableau croissant.
[b]Ainsi tu pourras économiser au moins un ou deux passages dans ta boucle par exécution du script, et économiser 4e-8 ms !![/b] OK, je suis parti en live là.