par
Liquid » 04 oct. 2005, 23:59
Pour ce qui est de ne pas stocker un résultat dans une base de données, ça se discute car dans une application de gestion, par exemple un compte bancaire, on ne recalcule pas le solde en prenant en compte toutes les opérations à chaque ajout. On stocke le solde à chaque fois et on prend le dernier pour ajouter ou enlever la somme de la nouvelle opération. Sinon les calculs sont bien trop lourds.
A part ça je propose une solution avec un tableau qui servirait d'index des scores :
$resultat = array( // Simulation résultat BdD
0 => array("TOTO1", 10, "03/01/2005"),
1 => array("TOTO2", 5, "02/01/2005"),
2 => array("TOTO3", 8, "01/01/2005"),
3 => array("TOTO4", 5, "01/01/2005")
);
// Devrait être fait pendant la récupération des résultats dans la base :
$scoreIndex = array();
foreach ($resultat as $key => $value)
$scoreIndex[] = $value[1];
// -- fin de la récupération des données dans la base
$scoreIndex = array_unique($scoreIndex); // Enlever les doublons
rsort($scoreIndex); // Tri décroissant
echo "Nom - Score - Date - Classement<br><br>";
foreach ($resultat as $key => $value){
$pos = (array_search($value[1], $scoreIndex) + 1); // +1 car tableau indexé à partir de 0
echo $value[0] . " - " . $value[1] . " - " . $value[2] . " - " . $pos . "<br>";
}
Pour ce qui est de ne pas stocker un résultat dans une base de données, ça se discute car dans une application de gestion, par exemple un compte bancaire, on ne recalcule pas le solde en prenant en compte toutes les opérations à chaque ajout. On stocke le solde à chaque fois et on prend le dernier pour ajouter ou enlever la somme de la nouvelle opération. Sinon les calculs sont bien trop lourds.
A part ça je propose une solution avec un tableau qui servirait d'index des scores :
[php]
$resultat = array( // Simulation résultat BdD
0 => array("TOTO1", 10, "03/01/2005"),
1 => array("TOTO2", 5, "02/01/2005"),
2 => array("TOTO3", 8, "01/01/2005"),
3 => array("TOTO4", 5, "01/01/2005")
);
// Devrait être fait pendant la récupération des résultats dans la base :
$scoreIndex = array();
foreach ($resultat as $key => $value)
$scoreIndex[] = $value[1];
// -- fin de la récupération des données dans la base
$scoreIndex = array_unique($scoreIndex); // Enlever les doublons
rsort($scoreIndex); // Tri décroissant
echo "Nom - Score - Date - Classement<br><br>";
foreach ($resultat as $key => $value){
$pos = (array_search($value[1], $scoreIndex) + 1); // +1 car tableau indexé à partir de 0
echo $value[0] . " - " . $value[1] . " - " . $value[2] . " - " . $pos . "<br>";
}
[/php]