Tri tableau
Résolu/Fermé
t671
Messages postés
1419
Date d'inscription
lundi 25 février 2008
Statut
Membre
Dernière intervention
26 février 2024
-
28 janv. 2018 à 12:20
yg_be Messages postés 22618 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 mars 2024 - 1 févr. 2018 à 12:05
yg_be Messages postés 22618 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 28 mars 2024 - 1 févr. 2018 à 12:05
A voir également:
- Tri tableau
- Tableau croisé dynamique - Guide
- Tableau ascii - Guide
- Tableau word - Guide
- Tri excel - Guide
- Identifier un tableau à partir d'une photo - Forum Graphisme
6 réponses
jordane45
Messages postés
38109
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
28 mars 2024
4 634
28 janv. 2018 à 13:17
28 janv. 2018 à 13:17
Bonjour,
En partant du principe que tes données sont stockées dans une BDD (vu ton code...)
J'ose espérer que les dates sont stockées dans des champs DATE (ou DATETIME ou TIMESTAMP)
Si ce n'est pas le cas... c'est que ton modèle de BDD n'est pas le bon !
Bref,
Tu as (dois avoir !) donc un champ correspondant à la DATE de mariage (au format YYYY-MM-DD) et un second champ (nommé par exemple info_date ) qui correspond a ta mention AVANT, APRES, VERS ( mais stocké sous forme numérique correspondant à l'ordre souhaité )
AUCUNE PRECISION = 0
AVANT = 1
VERS = 2
APRES = 3
Il t'est alors facile de récupéré déjà trié les infos depuis une requête SQL en utilisant simplement un ORDER BY
Par contre, quand je vois que tu as des champs date_mariage_1 date_mariage_2 date_mariage_3 date_mariage_4 ... je pense que tu n'as tenu compte d'aucune des remarques déjà données dans tes précédentes questions.
Tu t'obstines à travailler avec une structure de bdd bancale .... et c'est aussi un peu pour ça que tu es obligé de bidouillé en permanence ton code en PHP pour essayer d'obtenir ce que tu souhaites... là où, si la bdd était bien faite tu aurais tes résultats en quelques secondes sans avoir trop à réfléchir.
Bon courage.
En partant du principe que tes données sont stockées dans une BDD (vu ton code...)
J'ose espérer que les dates sont stockées dans des champs DATE (ou DATETIME ou TIMESTAMP)
Si ce n'est pas le cas... c'est que ton modèle de BDD n'est pas le bon !
Bref,
Tu as (dois avoir !) donc un champ correspondant à la DATE de mariage (au format YYYY-MM-DD) et un second champ (nommé par exemple info_date ) qui correspond a ta mention AVANT, APRES, VERS ( mais stocké sous forme numérique correspondant à l'ordre souhaité )
AUCUNE PRECISION = 0
AVANT = 1
VERS = 2
APRES = 3
Il t'est alors facile de récupéré déjà trié les infos depuis une requête SQL en utilisant simplement un ORDER BY
SELECT * FROM tatable ORDER BY datemariage, info_date
Par contre, quand je vois que tu as des champs date_mariage_1 date_mariage_2 date_mariage_3 date_mariage_4 ... je pense que tu n'as tenu compte d'aucune des remarques déjà données dans tes précédentes questions.
Tu t'obstines à travailler avec une structure de bdd bancale .... et c'est aussi un peu pour ça que tu es obligé de bidouillé en permanence ton code en PHP pour essayer d'obtenir ce que tu souhaites... là où, si la bdd était bien faite tu aurais tes résultats en quelques secondes sans avoir trop à réfléchir.
Bon courage.
t671
Messages postés
1419
Date d'inscription
lundi 25 février 2008
Statut
Membre
Dernière intervention
26 février 2024
11
Modifié le 28 janv. 2018 à 17:50
Modifié le 28 janv. 2018 à 17:50
J'ai 12000 personnages dans la base. Avec pour chaque personnage une date de naissance, une de décès, une à quatre dates de mariages. Soit 3 à 6 dates par enregistrement. Je ne peux pas m'amuser à reprendre toutes les dates ............!!!???
Sans compter qu'il y aurait également tous les scripts à modifier ..............
N'y a t'il pas moyen de trier l'Array en fonction de $marg_1, $marg_2, $marg_3 et $marg_4 ?
Sans compter qu'il y aurait également tous les scripts à modifier ..............
N'y a t'il pas moyen de trier l'Array en fonction de $marg_1, $marg_2, $marg_3 et $marg_4 ?
Pitet
Messages postés
2826
Date d'inscription
lundi 11 février 2013
Statut
Membre
Dernière intervention
21 juillet 2022
524
30 janv. 2018 à 16:25
30 janv. 2018 à 16:25
Salut,
Pas certain d'avoir bien compris ton besoin mais une solution serait éventuellement d'utiliser la fonction usort() pour écrire ta propre fonction de comparaison pour le tri du tableau : http://php.net/manual/fr/function.usort.php
Exemple :
Bonne journée,
Pas certain d'avoir bien compris ton besoin mais une solution serait éventuellement d'utiliser la fonction usort() pour écrire ta propre fonction de comparaison pour le tri du tableau : http://php.net/manual/fr/function.usort.php
Exemple :
$tonarray = [ ['mariage' => 'Mariage 1', 'date_mariage' => '2004'], ['mariage' => 'Mariage 2', 'date_mariage' => '2002'], ['mariage' => 'Mariage 3', 'date_mariage' => '2008'], ]; // tableau pas trié var_dump($tonarray); usort($tonarray, function($a, $b) { return $a['date_mariage'] > $b['date_mariage']; }); // tableau trié var_dump($tonarray);
Bonne journée,
t671
Messages postés
1419
Date d'inscription
lundi 25 février 2008
Statut
Membre
Dernière intervention
26 février 2024
11
Modifié le 30 janv. 2018 à 17:33
Modifié le 30 janv. 2018 à 17:33
Je pense savoir quelle attitude adopter, mais je ne sais pas comment l'écrire.
Si j'écris $marg = substr($tonarray[$i]['date_mariage'], -4);, $marg contient toutes les années des différents mariages. Exemple $marg =20121995 pour 2 mariages (2012 et 1995).
Il faut que je découpe $marg de 4 en 4, et ensuite que je trie dans l'ordre ASC tous les résultats.
J'ai essayé en utilisant les fonction usort, str_split(), substr .......... mais j'y arrive pas !!!
Si j'écris $marg = substr($tonarray[$i]['date_mariage'], -4);, $marg contient toutes les années des différents mariages. Exemple $marg =20121995 pour 2 mariages (2012 et 1995).
Il faut que je découpe $marg de 4 en 4, et ensuite que je trie dans l'ordre ASC tous les résultats.
J'ai essayé en utilisant les fonction usort, str_split(), substr .......... mais j'y arrive pas !!!
yg_be
Messages postés
22618
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
28 mars 2024
1 461
>
t671
Messages postés
1419
Date d'inscription
lundi 25 février 2008
Statut
Membre
Dernière intervention
26 février 2024
30 janv. 2018 à 20:23
30 janv. 2018 à 20:23
bonsoir,
as-tu essayé la suggestion de Pitet?
peut-être en l'adaptant ainsi:
au lieu de:
essayons:
as-tu essayé la suggestion de Pitet?
peut-être en l'adaptant ainsi:
au lieu de:
return $a['date_mariage'] > $b['date_mariage'];
essayons:
return substr($a['date_mariage'], -4) > substr($b['date_mariage'], -4);
t671
Messages postés
1419
Date d'inscription
lundi 25 février 2008
Statut
Membre
Dernière intervention
26 février 2024
11
31 janv. 2018 à 17:38
31 janv. 2018 à 17:38
J'ai le message d'erreur
Parse error: syntax error, unexpected T_FUNCTION in /mnt/100/sda/1/4/th11/gen_famille/gestion/fiche_indiv.php on line 479
Ligne qui correspond à
usort($tonarray, function($a, $b) {
Parse error: syntax error, unexpected T_FUNCTION in /mnt/100/sda/1/4/th11/gen_famille/gestion/fiche_indiv.php on line 479
Ligne qui correspond à
usort($tonarray, function($a, $b) {
yg_be
Messages postés
22618
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
28 mars 2024
1 461
31 janv. 2018 à 17:46
31 janv. 2018 à 17:46
je pense qu'il faut mettre ceci en début du code php:
et puis remplacer les lignes avec usort par:
function tri_mariage($a, $b) { return $a['date_mariage'] > $b['date_mariage']; }
et puis remplacer les lignes avec usort par:
usort($tonarray, "tri_mariage");
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
t671
Messages postés
1419
Date d'inscription
lundi 25 février 2008
Statut
Membre
Dernière intervention
26 février 2024
11
31 janv. 2018 à 18:10
31 janv. 2018 à 18:10
Il doit y avoir un problème, car mon deuxième var_dump ne s'affiche pas, et la suite du script non plus ..........
Pensant que ça aurait été plus simple, j'ai essayé de trier mon tableau en faisant
Mais j'ai le message d'erreur
Warning: array_multisort() [function.array-multisort]: Argument #1 is expected to be an array or a sort flag in ..........
// tableau pas trié var_dump($tonarray); function tri_mariage($a, $b) { return $a['date_mariage'] > $b['date_mariage']; } usort($tonarray, "tri_mariage"); { return substr($a['date_mariage'], -4) > substr($b['date_mariage'], -4); } // tableau trié var_dump($tonarray);
Pensant que ça aurait été plus simple, j'ai essayé de trier mon tableau en faisant
array_multisort($date_mariage, SORT_ASC, $tonarray);
Mais j'ai le message d'erreur
Warning: array_multisort() [function.array-multisort]: Argument #1 is expected to be an array or a sort flag in ..........
yg_be
Messages postés
22618
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
28 mars 2024
1 461
Modifié le 31 janv. 2018 à 19:35
Modifié le 31 janv. 2018 à 19:35
function tri_mariage($a, $b) { return substr($a['date_mariage'], -4) > substr($b['date_mariage'], -4); } // tableau pas trié var_dump($tonarray); usort($tonarray, "tri_mariage"); // tableau trié var_dump($tonarray);
t671
Messages postés
1419
Date d'inscription
lundi 25 février 2008
Statut
Membre
Dernière intervention
26 février 2024
11
1 févr. 2018 à 10:17
1 févr. 2018 à 10:17
Génial ! Merci beaucoup yg_be !
En fait, il suffisait que de trois lignes .............
Merci beaucoup :o)
A ++
En fait, il suffisait que de trois lignes .............
Merci beaucoup :o)
A ++
yg_be
Messages postés
22618
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
28 mars 2024
1 461
1 févr. 2018 à 12:05
1 févr. 2018 à 12:05
merci Pitet