Triage tableau [Résolu]

Signaler
Messages postés
89
Date d'inscription
samedi 30 octobre 2004
Statut
Membre
Dernière intervention
16 juin 2008
-
Messages postés
89
Date d'inscription
samedi 30 octobre 2004
Statut
Membre
Dernière intervention
16 juin 2008
-
bonjour,
est ce que vous pouvez me donner une idée de comment trier $tab selon les valeurs "val11","val21"... des sous tableaux du tableau $tab.

$tab=array (
array (
"att11" => "val11",
"att12" => "val12",
"att13" => "val13"
),
array (
"att21" => "val21",
"att22" => "val22",
"att23" => "val23"
)
);

merci d'avance

19 réponses

Messages postés
1154
Date d'inscription
mardi 9 septembre 2003
Statut
Membre
Dernière intervention
15 août 2009
14
J'y suis!



<?php

$tab=array (

array (

"att11" => "50%",

"att12" => "val12",

"att13" => "val13"

),

array (

"att21" => "10%",

"att22" => "val22",

"att23" => "val23"

),

array (

"att31" => "60%",

"att32" => "val32",

"att33" => "val33"

)



);

print_r($tab);echo '
';



for($i=0;$i<count($tab);$i++) $tab2[] = $tab[$i]['att'.($i+1).'1'];// on récupère la valeur de trie (le %)



arsort($tab2); // on classe en desc en conservant les clés



while (list($key, $val) = each($tab2)) $tab3[]=$tab[$key]; // on a les positions du 1e...



print_r($tab3);



?>

affichera:

Array
(
[0] => Array
(
[att11] => 50%
[att12] => val12
[att13] => val13
)

[1] => Array
(
[att21] => 10%
[att22] => val22
[att23] => val23
)

[2] => Array
(
[att31] => 60%
[att32] => val32
[att33] => val33
)

)
<br/>Array
(
[0] => Array
(
[att31] => 60%
[att32] => val32
[att33] => val33
)

[1] => Array
(
[att11] => 50%
[att12] => val12
[att13] => val13
)

[2] => Array
(
[att21] => 10%
[att22] => val22
[att23] => val23
)

)


Dis moi que c'est ce que tu voulais car j'ai failli envoyer mon ordi par la fenêtre!!!
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
8
for($i=0;$i<count($tab);$i++)



=>



$nb=count($tab);



for($i=0;$i<$nb;$i++)


<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li>
Messages postés
1154
Date d'inscription
mardi 9 septembre 2003
Statut
Membre
Dernière intervention
15 août 2009
14
Une idee? Oui: http://php.benscom.com/manual/fr/ref.array.php

Tu y trouves, entre autre:
array_multisort -- Tri multi-dimensionnel de tableaux

<DT>arsort -- Trie un tableau en ordre inverse
<DT>asort -- Trie un tableau et conserve l'association des index
</DT>
<DT>ksort -- Trie un tableau suivant les clés
</DT>
<DT>natcasesort -- Trie un tableau avec l'algorithme à "ordre naturel" insensible à la casse
<DT>natsort -- Trie un tableau avec l'algorithme à "ordre naturel" </DT>
<DT>rsort -- Trie un tableau en ordre inverse
<DT>shuffle -- Mélange les éléments d'un tableau
<DT>sort -- Trie un tableau
<DT>uasort -- Trie un tableau en utilisant une fonction de callback
<DT>uksort -- Trie un tableau par ses clés en utilisant une fonction de callback
<DT>usort -- Trie un tableau en utilisant une fonction de comparaison </DT>
<DT>
</DT>
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
8
Salut,



essaie la fonction array_multisort (www.php.net)

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li>
Messages postés
89
Date d'inscription
samedi 30 octobre 2004
Statut
Membre
Dernière intervention
16 juin 2008

merci pour votre reponse
mais le pb c'est que je veux pas trier le tableau $tab selon toutes les valeurs d'un sous array, mais je vx trier $tab selon la premiere valeur qui existe dans chaque sous array.donc je peux pas utiliser les fonctions de triage d'un tableau car elles necessitent un argument qui soit un tableau alors que dans mon cas j'ai une valeur!!

exemple:

$tab=array (
array (
"att11" => "50%",
"att12" => "val12",
"att13" => "val13"
),
array (
"att21" => "10%",
"att22" => "val22",
"att23" => "val23"
),
array (
"att21" => "60%",
"att22" => "val22",
"att23" => "val23"
)

);

apres triage je veux avoir un tableau de cette forme:

$tab=array (
array (
"att11" => "60%",
"att12" => "val12",
"att13" => "val13"
),
array (
"att21" => "50%",
"att22" => "val22",
"att23" => "val23"
),
array (
"att21" => "10%",
"att22" => "val22",
"att23" => "val23"
)

);
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
8
$tab[0], $tab[1] ce sont des arrays, tu fais ça pour ces array-ci et hop c'est fait

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li>
Messages postés
89
Date d'inscription
samedi 30 octobre 2004
Statut
Membre
Dernière intervention
16 juin 2008

effectivement le triage selon les valeurs numeriques marche, mais l'ordre et les noms des attributs ne restent pas le meme :(

$tab=array (
array (
"att11" => "50%",
"att12" => "val12",
"att13" => "val13"
),
array (
"att21" => "10%",
"att22" => "val22",
"att23" => "val23"
),
array (
"att21" => "60%",
"att22" => "val22",
"att23" => "val23"
)

);

devient :

$tab=array (
array (
[0] => val13
[1] => val12
[2] => 60%
),
array (
[0] => val23
[1] => val22
[2] => 10%
),
array (
[0] => val23
[1] => val22
[2] => 9%
)
);
Messages postés
89
Date d'inscription
samedi 30 octobre 2004
Statut
Membre
Dernière intervention
16 juin 2008

sorry je me suis tremper dans les valeurs des pourcentages,donc le tableau devient:
$tab=array (
array (
[0] => val13
[1] => val12
[2] => 60%
),
array (
[0] => val23
[1] => val22
[2] => 50%
),
array (
[0] => val23
[1] => val22
[2] => 10%
)
);
Messages postés
1154
Date d'inscription
mardi 9 septembre 2003
Statut
Membre
Dernière intervention
15 août 2009
14
c'est parce que le triage ce fait en fct de tout le tsoin tsoin, pas que en fct des valeurs num!

Sinon t'as qu'a faire un tableau genre $ttab = array(0=>$tab[0][0],1=>$tab[1][0],2=>$tab[2][0]), tu le tries et tu recuperes les cles. Ensuite tu les utilises pour ordonner ton tableau
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
8
Utilise la fonction asort : http://fr.php.net/manual/fr/function.asort.php

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li>
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
8
avec la fonction asort ça le fait sans passer par un autre tableau qui contient les clés

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li>
Messages postés
89
Date d'inscription
samedi 30 octobre 2004
Statut
Membre
Dernière intervention
16 juin 2008

mais si je trie selon $tab[$i] la fonction me tries les valeurs qui existent dans un seul sous tableau du tableau $tab,et c'est pas du tout ceci dont jj'ai besoin .moi je veux changer l'ordre des sous tableaux en totalité selon la premiere valeur de leur premier attribut .
comme ca :
$tab=array (
array (
"att11" => "50%",
"att12" => "val12",
"att13" => "val13"
),
array (
"att21" => "10%",
"att22" => "val22",
"att23" => "val23"
),
array (
"att31" => "60%",
"att32" => "val32",
"att33" => "val33"
)


);

deviendra
$tab=array (
array (
"att31" => "60%",
"att32" => "val32",
"att33" => "val33"
),


array (
"att11" => "50%",
"att12" => "val12",
"att13" => "val13"
),
array (
"att21" => "10%",
"att22" => "val22",
"att23" => "val23"
)
);

excusez moi si je vous est derangé
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
8
Bah tu fais une boucle pour changer tout les sous tableaux

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li>
Messages postés
89
Date d'inscription
samedi 30 octobre 2004
Statut
Membre
Dernière intervention
16 juin 2008

j'ai beau pensé, mais jusqu'au moment j'ai rien trouvé
Messages postés
1154
Date d'inscription
mardi 9 septembre 2003
Statut
Membre
Dernière intervention
15 août 2009
14
J'suis en train de me prendre le chou sur ton problème... grrrr...
Messages postés
1154
Date d'inscription
mardi 9 septembre 2003
Statut
Membre
Dernière intervention
15 août 2009
14
ca change quoi au schmilblick de rajouter une variable? Là je te suis pas... ???
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
8
c'est plus rapide plutôt que d'éxécuter de multiples fois la fonction count

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li>
Messages postés
1154
Date d'inscription
mardi 9 septembre 2003
Statut
Membre
Dernière intervention
15 août 2009
14
pas con, je note! Thanx...
Messages postés
89
Date d'inscription
samedi 30 octobre 2004
Statut
Membre
Dernière intervention
16 juin 2008

bravo,

je vous remercie infiniment vous m'avez vraiment aidé
merci encore une fois