[résolu] tri sur les valeurs d'un tableau

Petit nouveau ! | 6 Messages

11 juil. 2006, 00:21

Je débute sous PHP et je cherche une fonction qui pourrait me donner un tri sélectif efficace sur mon tableau (annuaire de liens).
J'ai cherché dans quelques tutoriaux de php mais je n'arrive pas savoir si ça correspond à ce que je veux faire.

Description de mon tableau à deux dimensions :
$tab[$i] : ligne de mon tableau
chaque ligne d'indice $i contient trois variables :
img, url, theme

J'ai donc par exemple pour mes 3 liens :
$tab[0][img]="logo.jpg";
$tab[0][url]="http://monsite.fr";
$tab[0][theme]="site perso";

$tab[1][img]="image.jpg";
$tab[1][url]="http://tonsite.fr";
$tab[1][theme]="site perso";

$tab[2][img]="logo3.jpg";
$tab[2][url]="http://sitesuperpro.fr";
$tab[2][theme]="site pro";
Et je voudrais afficher la liste de mes themes, à savoir ici :
- site perso
- site pro

(et non pas
- site perso
- site perso
- site pro
en sachant que parfois ils ne sont pas dans et ordre mais mélangé : site perso, site pro, site perso, site pro... Et je voudrais éviter les doublons
)

J'ai trouvé la fonction foreach qui parcourt bien mon tableau, mais ce n'est pas ce que je cherche puisqu'elle balaie chaque élément.
Je ne sais pas comment "mémoriser" le fait qu'un theme ait déjà été trouvé.

Je voudrais une fonction qui renvoie la liste simple de toutes les valeurs différentes prises par "theme".

Quelque chose comme :
fonction_que_je_cherche ($tab, "theme") qui donnerait ["site perso"," site pro"].

Pourriez-vous m'aider, me renvoyer vers un lien ou me donner une piste, une direction dans laquelle chercher ?

Merci de votre aide.
Modifié en dernier par fantchok le 16 juil. 2006, 22:54, modifié 1 fois.

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

11 juil. 2006, 00:47

Salut,

La fonction que tu cherches existe bien mais le tableau n'est pas sous la forme attendue pour l'exploiter => array_unique().

1ère solution une boucle pour parcourir tous les sous-tableaux et construire un autre tableau en y insérant le thème que s'il n'y est pas déjà présent avec in_array():
$tab[0]['img']="logo.jpg";
$tab[0]['url']="http://monsite.fr";
$tab[0]['theme']="site perso";

$tab[1]['img']="image.jpg";
$tab[1]['url']="http://tonsite.fr";
$tab[1]['theme']="site perso";

$tab[2]['img']="logo3.jpg";
$tab[2]['url']="http://sitesuperpro.fr";
$tab[2]['theme']="site pro"; 

$array_sites = array();
foreach($tab as $cle => $val)
{
	if(!in_array($val['theme'],$array_sites))
		$array_sites[]=$val['theme'];
}
echo '<pre>';
print_r($array_sites);
echo '</pre>';
2ème soluce changer l'ordre des indices du tableau en commençant par les indices associatif (img,url,theme) puis utiliser cette fameuse fonction array_unique() sur le sous tableau des themes:
$tab2['img'][0]="logo.jpg";
$tab2['url'][0]="http://monsite.fr";
$tab2['theme'][0]="site perso";

$tab2['img'][1]="image.jpg";
$tab2['url'][1]="http://tonsite.fr";
$tab2['theme'][1]="site perso";

$tab2['img'][2]="logo3.jpg";
$tab2['url'][2]="http://sitesuperpro.fr";
$tab2['theme'][2]="site pro"; 

$array_sites = array_unique ($tab2['theme']);
echo '<pre>';
print_r($array_sites);
echo '</pre>';

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Petit nouveau ! | 6 Messages

11 juil. 2006, 11:14

Première solution :

OK, merci ça marche super bien !

Par contre la deuxième ne fonctionne pas, il y a une erreur :
$array_sites = array_unique ($tab['theme']);
echo '<pre>';
print_r($array_sites);
echo '</pre>';

Code : Tout sélectionner

Warning: array_unique(): The argument should be an array in /var/www/web-php/liens.php on line 116
et ligne 116 dit :
$array_sites = array_unique ($tab['theme']);

C'est peut-être parce que mon $tab est un peu complexe, il y a en fait plusieurs tableaux imbriqués :

Code : Tout sélectionner

Array ( [0] => Array ( [TITLE] => Messagerie [LOGO] => printer-48.gif [URL] => openwebmail [THEME] => Histoire [DESC] => Array ( [fr] => Consultez votre courrier électronique [en] => Use your private mail box ) ) [1] => Array ( [TITLE] => Les pages perso éteintes et allumées [LOGO] => visiter-48.gif [URL] => pages_perso.php [THEME] => Géographie [DESC] => Array ( [fr] => Consultez les pages perso présentes sur le serveur [en] => Personal pages ) ) )

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

11 juil. 2006, 21:39

regarde bien l'ordre des indices des tableaux des deux solutions :wink:

1er cas :
$tab2[0]['img']
2ème cas :
$tab2['img'][0]
La 2ème solution ne fonctionne que si tu retouches à l'ordre des indices

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Petit nouveau ! | 6 Messages

11 juil. 2006, 21:49

Très bien, je n'avais pas fait attention.
Merci beaucoup pour ces renseignements.

A bientôt peut-être sur le forum de PHP et encore merci !

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

11 juil. 2006, 22:15

Oui certainement à bientôt....... prends les bonnes habitudes, n'oublis pas le tag [Résolu] (bouton en haut à gauche)

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute