Triage tableau

Résolu
lucky82 Messages postés 89 Date d'inscription samedi 30 octobre 2004 Statut Membre Dernière intervention 16 juin 2008 - 8 août 2005 à 12:08
lucky82 Messages postés 89 Date d'inscription samedi 30 octobre 2004 Statut Membre Dernière intervention 16 juin 2008 - 9 août 2005 à 01:52
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

malik7934 Messages postés 1154 Date d'inscription mardi 9 septembre 2003 Statut Membre Dernière intervention 15 août 2009 17
8 août 2005 à 18:42
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!!!
3
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
8 août 2005 à 20:22
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>
3
malik7934 Messages postés 1154 Date d'inscription mardi 9 septembre 2003 Statut Membre Dernière intervention 15 août 2009 17
8 août 2005 à 12:51
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>
0
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
8 août 2005 à 12:54
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>
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
lucky82 Messages postés 89 Date d'inscription samedi 30 octobre 2004 Statut Membre Dernière intervention 16 juin 2008
8 août 2005 à 13:21
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"
)

);
0
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
8 août 2005 à 13:22
$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>
0
lucky82 Messages postés 89 Date d'inscription samedi 30 octobre 2004 Statut Membre Dernière intervention 16 juin 2008
8 août 2005 à 13:44
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%
)
);
0
lucky82 Messages postés 89 Date d'inscription samedi 30 octobre 2004 Statut Membre Dernière intervention 16 juin 2008
8 août 2005 à 13:48
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%
)
);
0
malik7934 Messages postés 1154 Date d'inscription mardi 9 septembre 2003 Statut Membre Dernière intervention 15 août 2009 17
8 août 2005 à 13:48
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
0
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
8 août 2005 à 13:49
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>
0
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
8 août 2005 à 13:50
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>
0
lucky82 Messages postés 89 Date d'inscription samedi 30 octobre 2004 Statut Membre Dernière intervention 16 juin 2008
8 août 2005 à 14:22
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é
0
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
8 août 2005 à 14:40
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>
0
lucky82 Messages postés 89 Date d'inscription samedi 30 octobre 2004 Statut Membre Dernière intervention 16 juin 2008
8 août 2005 à 17:40
j'ai beau pensé, mais jusqu'au moment j'ai rien trouvé
0
malik7934 Messages postés 1154 Date d'inscription mardi 9 septembre 2003 Statut Membre Dernière intervention 15 août 2009 17
8 août 2005 à 18:28
J'suis en train de me prendre le chou sur ton problème... grrrr...
0
malik7934 Messages postés 1154 Date d'inscription mardi 9 septembre 2003 Statut Membre Dernière intervention 15 août 2009 17
8 août 2005 à 20:26
ca change quoi au schmilblick de rajouter une variable? Là je te suis pas... ???
0
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
8 août 2005 à 20:27
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>
0
malik7934 Messages postés 1154 Date d'inscription mardi 9 septembre 2003 Statut Membre Dernière intervention 15 août 2009 17
8 août 2005 à 20:28
pas con, je note! Thanx...
0
lucky82 Messages postés 89 Date d'inscription samedi 30 octobre 2004 Statut Membre Dernière intervention 16 juin 2008
9 août 2005 à 01:52
bravo,

je vous remercie infiniment vous m'avez vraiment aidé
merci encore une fois
0
Rejoignez-nous