Problème de tableau array() en PHP

Résolu/Fermé
SOUMIE Messages postés 22 Date d'inscription mercredi 1 octobre 2008 Statut Membre Dernière intervention 2 octobre 2022 - Modifié le 11 mai 2022 à 09:50
SOUMIE Messages postés 22 Date d'inscription mercredi 1 octobre 2008 Statut Membre Dernière intervention 2 octobre 2022 - 11 mai 2022 à 10:21
Bonjour à tous,

Je ne suis pas très à l'aise avec PHP et tout particulièrement avec les tableaux array().
Sur le code ci-dessous, j'aimerais ressortir les données selon un classement décroissant basé sur la variable "$compatilité" qui est un chiffre compris entre 0 et 100.

En gros j'aimerais pouvoir afficher sur une ligne la personne (nom + age + eval) qui a l'eval la plus élevée. Puis sur une autre ligne plus bas dans mon document la seconde puis encore plus loin la troisième. Je ne veux donc pas d'un simple tableau.

Je vous en remercie d'avance.

$pax = array(
   
   "1" => array(
         "Nom" => $postulant_1,
         "Age" => $age_1,
         "eval" => $compatibilite_1,
    ),
 "2" => array(
         "Nom" => $postulant_2,
         "Age" => $age_2,
         "eval" => $compatibilite_2,
    ),

    "3" => array(
         "Nom"  => $postulant_3,
         "Age" => $age_3,
         "eval" => $compatibilite_3,
    )
);
A voir également:

4 réponses

jordane45 Messages postés 38346 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 décembre 2024 4 717
11 mai 2022 à 09:54
Bonjour,

1 - j'ai déplacé ta question dans le bon forum .... PHP

2 - j'ai édité ton message pour y corriger les balises de code ( en y mettant le langage concerné) afin d'avoir la coloration syntaxique et la numérotation des lignes3

3 -
En gros j'aimerais pouvoir afficher sur une ligne la personne (nom + age + eval) qui a l'eval la plus élevée. Puis sur une autre ligne plus bas dans mon document la seconde puis encore plus loin la troisième

Donc tu veux pouvoir trier ton array.
En gros
  $columns = array_column($pax, 'eval');
  array_multisort($columns, SORT_DESC, $pax);


ensuite, pour l'affichage .. une simple boucle sur ton array ... et un peu de html et le tour est joué.

Je te laisse revenir vers nous lorsque tu auras déjà commencé à écrire le code ...si tu rencontres des soucis...
0
SOUMIE Messages postés 22 Date d'inscription mercredi 1 octobre 2008 Statut Membre Dernière intervention 2 octobre 2022 1
11 mai 2022 à 10:10
Bonjour et merci mille fois pour ton aide. En fait, en fouillant sur le web j'avais effectivement trouver "array_column" mais je ne trouve pas la manière de m'en servir pour répondre à mon besoin. En fait, j'ai testé comme ceci mais rien ne fonctionne

$columns = array_column($pax, 'eval');
$result = array_multisort($columns, SORT_DESC, $pax);


Et après pour les afficher sur ma page, j'ai testé :

echo $columns[0]; //ça m'affiche effectivement le bon éval; Mais je ne sais pas comment faire pour récupérer le nom et l'age associé
// ou alors
echo $result[0];
// ou alors
echo $result[0]['Nom'];
// ou alors
echo $columns[0]['Nom'];
0
jordane45 Messages postés 38346 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 décembre 2024 4 717
11 mai 2022 à 10:15
Si tu compares ton code avec le mien .. tu verras que je n'ai pas mis de variable $result .......
Cette fonction trie le tableau...
Et .. comme indiqué dans la documentation.array-multisort Documentation.. elle retourne juste un booleen...
Valeurs de retour ¶
Cette fonction retourne true en cas de succès ou false si une erreur survient.


Toi.. il faut que tu continues à utiliser $pax pour la suite du code...
0
SOUMIE Messages postés 22 Date d'inscription mercredi 1 octobre 2008 Statut Membre Dernière intervention 2 octobre 2022 1
Modifié le 11 mai 2022 à 10:22
Ah ok !!! Super, merci beaucoup. Cela faisait deux jours que j'avais trouvé array_multisort() et j'étais persuadé qu'il fallait créer une nouvelle variable mais non... C'est bon désormais. Vraiment un grand merci !
$pax[1]['Nom'];// ça fonctionne parfaitement et dans l'ordre croissant de eval. C'est génial


Encore un grand merci !
0