Tri tableau multidimensionnel, problème array_multisort

Mammouth du PHP | 531 Messages

04 janv. 2009, 14:55

Bonjour,

J'essaye de trier un tableau multidimensionnel mais la fonction me renvoi une erreur :

Warning: array_multisort() [function.array-multisort]: Argument #1 is expected to be an array or a sort flag in...

Je n'arrive pas à comprendre ce qui cloche...

Voici ce que j'ai fait pour essayer de trier sur la clé nb :

array_multisort($tabResult['nb'], SORT_NUMERIC, SORT_DESC, $tabResult);

Sur ce tableau :
Array ( 
[278] => 
Array ( [nb] => 14 
[title] => XHTML / CSS - Les forums - Toutes vos questions sur la réalisation de sites web en XHTML et CSS 
[description] => Toutes vos questions sur la réalisation de sites web en XHTML et CSS 
[url] => http://www.siteduzero.com/forum-81-122.html?visite=1&is_new=1 [domaine] => www.siteduzero.com 
[pertinence] => bonne ) 
[55] => 
Array ( [nb] => 9 
[title] => AlsacréationS apprendre XHTML, les CSS et les standards W3C de la conception Web 
[description] => Alsacreations, conception de sites web HTML et CSS conformes aux standards W3C et accessibles aux personnes handicapees 
[url] => http://www.alsacreations.com/ 
[domaine] => www.alsacreations.com 
[pertinence] => bonne )
}

ViPHP
fab
ViPHP | 2657 Messages

04 janv. 2009, 15:26

array_multisort te demande un tableau ( array ) en premier paramètre, là tu transmets or dans ton cas 'nb' est une clef de ton tableau.
De plus $tabResult['nb'] ne doit surement pas exister
Seul l'intelligent a le pouvoir de se trouver con
try { work(); } catch(FlemmeExeption $e) { sleep(84600); }

Mammouth du PHP | 531 Messages

04 janv. 2009, 15:39

Oups... ben oui.

De plus array-multisort réindexe les clés numériques, hors il ne faut pas que la clé principale soit changé, mais juste que le tableau soit retrié en fonction de nb.

J'ai l'impression d'être un peu bloqué :roll:

ViPHP
fab
ViPHP | 2657 Messages

04 janv. 2009, 15:55

Je pense que tu n'as pas d'autre choix que de passer par une boucle qui lit ton tableau et qui stock les nb dans un autre tableau et ensuite de reconstruire le premier tableau :)
Seul l'intelligent a le pouvoir de se trouver con
try { work(); } catch(FlemmeExeption $e) { sleep(84600); }

Mammouth du PHP | 531 Messages

04 janv. 2009, 17:34

Je pense que tu n'as pas d'autre choix que de passer par une boucle qui lit ton tableau et qui stock les nb dans un autre tableau et ensuite de reconstruire le premier tableau :)
hummm je comprend moyennement
L'idée serais donc d'avoir un autre tableau qui contiene les nb et les id de l'autre tableau :

Array ( [0] => Array ( [idPage] => 278 ) [1] => Array ( [nb] => 14 ) [2] => Array ( [idPage] => 3081 )...

Enssuite je tri ce tableau sur les nb ( dailleur je n'y arraive toujours pas même sur ce tableau... )

Et ensuite je boucle le deuxième tableau et je reconstruit l'autre dans le bon ordre ???

EDIT : Oups mon tableau était faux, voilà ce que ça me fait pour ce tableau de nb :
Warning: array_multisort() [function.array-multisort]: Argument #2 is expected to be an array or a sort flag in ...
Array ( [0] => Array ( [idPage] => 2030 [nb] => 27 ) [4] => Array ( [idPage] => 3787 [nb] => 21 ) [5] => Array ( [idPage] => 7758 [nb] => 18 ) [16] => Array ( [idPage] => 7743 [nb] => 9 ) [28] => Array ( [idPage] => 2146 [nb] => 9 ) [nb] => ) 

ViPHP
fab
ViPHP | 2657 Messages

04 janv. 2009, 17:46

Regarde la fonction asort je crois pour le tri de ton tableau :)
http://fr.php.net/asort
Seul l'intelligent a le pouvoir de se trouver con
try { work(); } catch(FlemmeExeption $e) { sleep(84600); }

Mammouth du PHP | 531 Messages

04 janv. 2009, 18:15

Ah oui on en oublierait presque les fonctions simple de php ^^

Merci bien !

Voilà le problème est réglé :
// Tri final
				arsort($tabClassement);
				foreach($tabClassement as $k=>$v)
				{
					$finalResult[$k]['nb'] = $tabResult[$k]['nb'];
					$finalResult[$k]['title'] = $tabResult[$k]['title'];
					$finalResult[$k]['description'] = $tabResult[$k]['description'];
					$finalResult[$k]['url'] = $tabResult[$k]['url'];
					$finalResult[$k]['domaine'] = $tabResult[$k]['domaine'];
					$finalResult[$k]['pertinence'] = $tabResult[$k]['pertinence'];
				}

ViPHP
fab
ViPHP | 2657 Messages

04 janv. 2009, 19:08

Au plaisir :)
Seul l'intelligent a le pouvoir de se trouver con
try { work(); } catch(FlemmeExeption $e) { sleep(84600); }