Page 1 sur 1

Faire un tableau array() trop complexe pour moi !

Posté : 06 nov. 2007, 12:09
par Sebe
Bonjour,

J'ai un petit soucis pour créer un tableau de type array() ... j'essaye d'y utiliser des fonctions, peut-être naïvement !

En résumé:
Je travaille pour créer un composant [Joomla!] qui permettra de gérer des classements de course à pied. Là, je voudrais afficher un classement général et après plusieurs recherches, il me semble que le tableau de type array() serait la meilleure piste ... c'est aussi la seule que j'ai :roll:

Dans un 1er temps (après avoir sélectionné une année) , je récupère (via leur dossard) les coureurs concernées c-à-d tout ceux qui ont couru durant cette année ... à noter que pour des facilités visuelles, j'ai limité à 5 coureurs !
$annee = 2004;
$countch = 5;

global $database;
$query = "SELECT chang.id, chang.club_id, chang.participant_id, chang.annee, chang.dossard, chang.categorie_id,"
	. "\n part.id AS part_id, part.nom, part.prenom"
	. "\n FROM #__classement_chang AS chang"
	. "\n INNER JOIN #__classement_participant AS part ON part.id = chang.participant_id"
	. "\n WHERE annee ='" . $annee . "'"
	. "\n LIMIT $countch"
	;
$database->setQuery( $query );
$runnerlist = $database -> loadObjectList();

$i=0;
foreach ($runnerlist as $runner){
  $scores[$i]= array('annee' => $annee,'part_id' => $runner->part_id,'dossard' => $runner->dossard);
  $i ++;
  }
Pour construire mon classement général, je dois comptabiliser le nombre de point que le coureur a eu sur sa saison ... (faisons court) la sommes des points des 10 meilleures courses + bonus !
Pour commencer, il faut compter le nombre de courses effectuées pour octroyer le bonus et j'ai pensée que j'aurai pu utiliser une fonction dans le tableau:
La fonction avec comme arguments l'année en question, le numéro de dossard et le type de course:
function count_course($annee, $dossard, $pat_chal) {
global $database;

$query = "SELECT "
	. "\n COUNT(*)"
	. "\n FROM #__classement AS clas"
	. "\n INNER JOIN #__classement_course AS course ON course.id = clas.course_id"
	. "\n WHERE DATE_FORMAT(course.date,'%Y') = '" . $annee . "' AND clas.dossard = '" . $dossard . "' AND course.pat_chal = '" . $pat_chal . "'"
	. "\n GROUP BY clas.dossard"
	;
$database->setQuery( $query );
$count = $database -> loadResult();
et l'appel:
echo $dossard = 195; // dossard par défaut pour voir si elle fonctionne
$pat = count_course($annee, $dossard, $pat_chal = 'P'); // patronnées
echo '<br/><br/>Courses patronnées = ' . $pat;
me renvoie ce que j'attendais:
Courses patronnées = 1
Maintenant si j'incorpore cette fonction dans mon tableau
$i=0;
foreach ($runnerlist as $runner){
  $scores[$i]= array('annee' => $annee,'part_id' => $runner->part_id,'dossard' => $runner->dossard,'pat' => count_course($annee, $dossard=$runner->dossard, $pat_chal = 'P'));
  $i ++;
  }
print_r($scores);
Cela fonction mais est-ce correcte de fonctionner ainsi ?

FIN DE LA 1er PARTIE :roll:

Merci

Posté : 09 nov. 2007, 09:36
par Sebe
Salut,

Grâce à un travail collectif (ici), je commence à avoir un tableau intéressant :
$i=0;
foreach ($runnerlist as $runner){
$scoreslist[$i]= array(
	'annee' => $annee,
	'nom' => $runner->nom,
	'prenom' => $runner->prenom,
	'part_id' => $runner->part_id,
	'dossard' => $runner->dossard,
	'club' => $runner->club,
	'categorie' => $runner->categorie,
	'pat' => count_course($annee, $dossard = $runner->dossard, $pat_chal = 'P'),
	'chal' => count_course($annee, $dossard = $runner->dossard, $pat_chal = 'C'),
	'points' => points($annee, $dossard = $runner->dossard));
$i ++;
Maintenant, j'aimerai trier ce tableau par ordre décroissant sur les 'points' et j'y ai quelques problèmes ... j'ai essayé d'exploiter la fonction array_multisort mais je dois certainement encore mal m'y prendre !

Merci

Posté : 09 nov. 2007, 09:40
par Sebe
J'ai oublié de dire où j'en étais dans mon essai :
array_multisort($scoreslist->points, SORT_DESC);
et j'ai un message d'erreur du type:
Warning: array_multisort() [function.array-multisort]: Argument #1 is expected to be an array or a sort flag in /home.2/kainbuye/www/components/com_classement/classement.php on line 474
Moi qui pensais 'KI NAVE KA' :(

Merci

Posté : 09 nov. 2007, 09:46
par Sebe
Eh bien oui, I NAVE KA:
foreach ($scoreslist as $key => $row) {
    $score[$key]  = $row['points'];
}

array_multisort($score, SORT_DESC, $scoreslist);
Je laisse le sujet ouvert car j'ai encore d'autres petites modifications pour rendre le tableau encore plus complexe !

Merci