Récupérer une fois les deux premiers caractères d'une liste de mots

WRInaute passionné
Bonjour,


J'ai du mal à voir comment faire la chose qui suit...
Voilà : J'ai une liste de mots classés par ordre alphabétique, par exemple :

- Banane
- Bateau
- Bazzard
- Blanc
- Bleu
- Bouffon
- Boulet

Je souhaite récupérer une seule fois les deux premières lettres de chacun de ces mots.

Ce qui donne ici :
- Ba
- Bl
- Bo

Ca c'est la première partie.

La deuxième partie, c'est d'ajouter une ancre au premier mot de la liste présentant les deux caractères en question. Ainsi, en cliquant sur "Bo", on arrive directement à "Bouffon" (désolé pour l'exemple).

Voyez-vous comment faire ça, s'il vous plait ?
 
WRInaute passionné
meuhh euh je veux dire Bonsoir :-)

à tout hasard :

Code:
SELECT DISTINCT LEFT(tonchamp, 2) FROM tatable

:?:

Pour le second point avec un select ... LIKE'tonancre%' ça devrait le faire
 
WRInaute accro
AVec un tableau multi-dimensions tu devrais pouvoir faire ça :

1. Tu parcours chaque item de ta liste, et tu extrais à chaque fois les deux premiers caractères :

a. Soit ces deux premières caractères sont déjà utilisé comme clé dans ton tableau (tu testes ça avec http://fr2.php.net/manual/en/function.array-key-exists.php), donc tu affectes le mot que tu es en train de parcourir comme une valeur associée à cette clé

b. Soit ils ne sont pas connus et donc tu crée en même temps la clé et sa première valeur

Tu auras donc au final un tableau qui ressemble à ça :

Code:
$t_wordlist = array(
     'ba' => array ('banane','bateau','bazard'),
     'bl' => array (''blanc','bleu'),
     'bo' => array ('bouffon','boulet'),
)

Une fois que tu as ce tableau, il n'est pas très dur de le parcourir clé par clé, puis valeur après valeur, en faisant un echo pour chaque item, et en intégrant ce echo dans un <a></a> s l'item que tu es en train d'afficher est le premier connu pour la clé en cours.
 
WRInaute passionné
Hum... En fait, le problème du tableau c'est que si la liste fait plus de 100 mots et c'est le cas, ça va faire 100 tests sur un tableau de 100 cases... Ca me semble beaucoup (ceci dit, je maîtrise mal les histoires de tableaux php).

Je viens d'avoir une autre idée :
Je récupère les deux premiers caractères du premier mot. Je les place en variable. Je teste les deux premiers caractère du second mots pour savoir s'ils sont similaire à la variable précédente. Si oui, je pose une ancre au mot précédent (comment remonter d'une case uh uh...)
Si non, je poursuis le script jusqu'à qu'un mot commence différemment des précédents, etc...

Il reste à récupérer une seule fois les deux premiers caractères de chaque mot pour faire les liens d'ancre, tout en haut du tableau. Pour ça, l'idée de druart est sans doute bonne, si toutefois ça requête est possible (là je dois aller au dodo, je teste demain matin).
 
WRInaute accro
En perl:

Code:
my %hash;
$hash{substr($_,0,2)} = undef for @list;
my @result = keys %hash;

Ca doit donner quelque chose de similaire en php, genre:

Code:
foreach ($liste as $i)
{
  $hash[substr($i,0,2)] = 1;
}
$resultat = array_keys($hash)

A vérifier, je ne programme pas en php bien souvent.

Jacques.
 
WRInaute passionné
En fait il y a plusieurs solutions comme tu le vois.
Après il faut savoir ce que tu veux en faire exactement et choisir celle qui mangera le moins de ressources.

Tiens-nous au courant ;-)
 
Discussions similaires
Haut