Ce que je voudrais faire c'est donner des points aux joueurs en fonction de leur score. Pour une partie à 3, le 1er aurait 7 points, le 2ème 4 points et le dernier 0 point (que je multiplierais par la durée de partie mais c'est une autre histoire) et insérer ces points dans un champ de ma table en même temps que j'insère le joueur, son score et la durée de partie.
Pour infos j'insère dans ma table avec cette requête :
if (isset($_POST['joueurs']) && is_array($_POST['joueurs'])) {
foreach ($_POST['joueurs'] as $joueur) {
$resultat->execute(array($lastid, $joueur['id_joueur'], $joueur['score']));
}
}
Et donc je voudrais ajouter $joueur['points'] à la fin
Faut-il donc que je trie (ursort ?) mon array pour pouvoir attribuer les points ensuite en ajouter une ligne ? le problème c'est que j'ai des array pour chaque joueur dans mon array... Faut-il faire le trie avant validation du form ? Je suis coincé et je ne vois pas comment faire.
Et pour compliquer les choses, pour une partie à 4 joueurs les points seraient différents (10, 6, 4, 0). Et également pour 2 ou 5 joueurs...
Si vous avez des pistes à me donner (voir la solution )
C'est une bonne idée mais je n'arrive pas à la mettre en place. ta fonction fontionne nickel quand je l'intègre mais en essayant de récupérer mes données je block.
Puis-je directement la mettre dans le foreach (vu que c'est là qu'on défini $joueurs) ?
genre ça :
if (isset($_POST['joueurs']) && is_array($_POST['joueurs'])) {
foreach ($_POST['joueurs'] as $joueur) {
usort(
$joueurs,
function ($a, $b) {
return $b['score'] <> $a['score'];
}
);
var_dump($joueurs);
}
Evidemment non car je récupère un array (et même plusieurs) et non une variable...
ça y est en voyant ton code je comprends le fonctionnement de usort. Si je peux me permettre j'ai encore deux questions : à quoi ça sert la fonction que tu as mis en commentaire ici : " array_key_exists(count($_POST['joueurs']), BONUS) "
Et du coup ma deuxième question : je dois avoir un souci de tri, quand je fais : Steeve 9, Nico 8, Romain 10 avec bonus 7 / 4 / 0 j'obtiens Steeve 9, Nico 15, Romain 14. Donc romain a eu le de 4 alors qu'il est premier, Nico de 7 alors qu'il est dernier et Steeve de 0 alors qu'il est 2ème. Bizarre.
un var_dump de $_post['joueurs'] après le tri dans le foreach me donne ça :
Merci encore, je vais finir par te créditer sur le site
EDIT : Je crois que j'ai trouvé, il manquait le "=" ici : return $b['score'] <> $a['score'];
Du coup en mettant return $b['score'] <=> $a['score']; ça a l'air de fonctionner. Par contre je vais modifier le execute parce que mon but n'était pas d'voir un bonus pour le score mais bien une nouvelle entrée dans la table à côté de score qui s'appelle "points" (que je multiplierai par la durée de la partie). Je m'y mets
> à quoi ça sert la fonction que tu as mis en commentaire ici : " array_key_exists(count($_POST['joueurs']), BONUS) "
A n'accepter/prendre (si décommenté) que les formulaires soumis avec autant de joueurs que les clés de ce tableau BONUS (soit uniquement avec 2 à 5 joueurs - tous deux compris)
> EDIT : Je crois que j'ai trouvé, il manquait le "=" ici : return $b['score'] <> $a['score'];
Super merci pour les précisions ! Je crois que je vais étendre à 6 joueurs et décommenter pour le prendre en compte !
Le site fonctionne parfaitement, c'est cool parce que le tournois commence vendredi ! Maintenant j'attaque le HTML/CSS
Encore merci pour ton aide je n'aurais jamais réussi à temps sans ça
Trier un tableau et lui ajouter des valeurs en +
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli