IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

afficher une seule fois les deux premiers caractères d'une liste de mot


Sujet :

Langage PHP

  1. #1
    Inscrit
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    531
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 531
    Points : 282
    Points
    282
    Par défaut afficher une seule fois les deux premiers caractères d'une liste de mot
    Bonjour,

    Je souhaite faire quelque chose qui dépasse un peu mon niveau en programmation, mais pas très difficile pour autant, je pense.

    J'explique. 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).

    Bon, je pense que mon explication est claire et que dire de plus si ce n'est que j'espère que vous pourrez m'aider pour ce script

  2. #2
    Membre éclairé Avatar de metagoto
    Profil pro
    Hobbyist programmateur
    Inscrit en
    Juin 2009
    Messages
    646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Hobbyist programmateur

    Informations forums :
    Inscription : Juin 2009
    Messages : 646
    Points : 845
    Points
    845
    Par défaut
    Parcours ta liste. Pour chaque item, tu extraits les 2 premières lettres (substr).
    Place ces 2 premières lettres en tant que clé d'un tableau associatif, ce qui fait qu'il n'y aura pas de boublons. Si tu veux récupérer "l'ancre", il suffirait de vérifier que la clé n'existe pas encore avant de la placer dans le tableau associatif

  3. #3
    Inscrit
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    531
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 531
    Points : 282
    Points
    282
    Par défaut
    Merci pour ta réponse metagoto.

    Je suis en train de chercher une autre solution là, parce que pour certains tableaux de plus de 100 mots nécessitant un test sur chaque mot, ça va faire un script très très long à exécuter, je crois...

  4. #4
    Membre régulier Avatar de ThitoO
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 134
    Points : 81
    Points
    81
    Par défaut
    Ce que je ferais à ta place:
    - récuperer les deux premiers caractères du mot via substr
    - tenir à jour un tableau contenant les "index" (les deux premier caractères)
    - creer une variable (un array) nommé avec l'index. Retrouvable ensuite en faisant par exemple $Ba.

    Comme ca pas de tableau associatifs avec plusieurs fois les mêmes valeurs ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    $mots = array('Banane','Bateau','Bazzard','Blanc','Bleu','Bouffon','Boulet');
    $tri = array();
     
    foreach($mots as $mot){
    	$debut = substr($mot,0,2);
    	if(!in_array($debut,$tri)){
    		//Ajoute le début du mot trouvé dans le tableau 'tri'
    		$tri[count($tri)] = $debut;
    	}
     
    	//Cree un tableau portant le nom du début du mot
    	//et y ajoute le mot complet
    	if(isset($$debut)){
    		$add = array($mot);
    		$$debut = array_merge($$debut,$add);
    	}else{
    		$$debut = array($mot);
    	}
    }
     
    foreach($tri as $mot){
    	echo $mot.': ';
    	var_dump($$mot);
    	echo '<br/>';
    }
    Le 2e foreach est pour tester

  5. #5
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    L'idée précédente est bonne, mais je trouve le code pour générer le tableau un peu compliqué. Il existe une façon plus courte pour y arriver :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    <?php
     
    $mots = array('Banane','Bateau','Bazzard','Blanc','Bleu','Bouffon','Boulet');
     
    $classement = array();
     
    foreach($mots as $mot){
     
        $key = substr($mot,0,2);
        if( array_key_exists($key, $classement) )
            $classement[$key][] = $mot;
        else
            $classement[$key] = array( $mot );
    }
     
    print_r ($classement);

Discussions similaires

  1. Réponses: 2
    Dernier message: 04/10/2007, 12h31
  2. [MySQL] afficher une seule fois les réponses identiques
    Par Giantrick dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 30/05/2007, 13h35
  3. Réponses: 19
    Dernier message: 12/04/2007, 16h11
  4. Réponses: 2
    Dernier message: 14/06/2006, 10h30
  5. [XSLT] Afficher une seule fois les attributs redondants...
    Par kobe dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 17/11/2005, 10h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo