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 :

Utilisation correcte de substr


Sujet :

Langage PHP

  1. #1
    Membre averti Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Points : 436
    Points
    436
    Par défaut Utilisation correcte de substr
    Bonjour à tous,

    J'ai une chaine de mots-clés aléatoires générée par une boucle qui se compose comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $liste = "";
    $i = 0;
     
    foreach($tab_mots_cles as $mc){
       $liste .= '<span id="'.$i.'">'.$mc.' , </span>';
       $i++;
    }
    Et ce que je voudrais faire avec substr, mais est-ce la fonction la plus appropriée ?, c'est supprimer la dernière virgule.
    Dans le source, ma chaine va donc s'afficher comme suit :

    <span id="0">Toto , </span><span id="1">Tata , </span><span id="2">Tutu , </span>
    Et bien sûr, si je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $liste = substr($liste, 0 , -7);
    Je supprime le dernier </span> avec. Ce que je ne veux pas.
    Juste la dernière virgule !
    Merci de votre aide.

  2. #2
    Membre averti Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Points : 436
    Points
    436
    Par défaut
    Solution de bricolage :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $liste = substr($liste, 0 , -9);
    $liste .= '</span>';
    Mais il doit être possible de faire plus élégant, non ?

  3. #3
    Membre émérite
    Avatar de Nesmontou
    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Septembre 2004
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2004
    Messages : 1 612
    Points : 2 969
    Points
    2 969
    Par défaut
    Bonjour,

    C'est normal que la virgule soit dans l'élément <span /> ?

    Si non, tu peux essayer ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php
    $tab_mots_cles = array( 'Toto', 'Tata', 'Titi' );
     
    function to_html(&$value, $key) {
    	$value = '<span id="' . $key . '">' . $value . '</span>';
    }
     
    array_walk($tab_mots_cles, 'to_html');
     
    echo implode(', ', $tab_mots_cles);
    ?>
    Tu obtiens alors
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <span id="0">Toto</span>, <span id="1">Tata</span>, <span id="2">Titi</span>

  4. #4
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 887
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 887
    Points : 16 320
    Points
    16 320
    Par défaut
    Il y a plusieurs méthodes, et personnellement j'aime bien celle-là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $tab = array( 'Toto', 'Tata', 'Titi' );
    $sep = $chaine = '';
     
    foreach ( $tab as $t ) {
       $chaine .= $sep . $t;
       $sep = ', ';
    }
     
    echo $chaine; // Toto, Tata, Titi

  5. #5
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    Citation Envoyé par Bisûnûrs Voir le message
    Il y a plusieurs méthodes, et personnellement j'aime bien celle-là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $tab = array( 'Toto', 'Tata', 'Titi' );
    $sep = $chaine = '';
     
    foreach ( $tab as $t ) {
       $chaine .= $sep . $t;
       $sep = ', ';
    }
     
    echo $chaine; // Toto, Tata, Titi

    bien joué t'as recrée implode

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $tab = array( 'Toto', 'Tata', 'Titi' );
    echo implode(', ', $tab);

  6. #6
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 887
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 887
    Points : 16 320
    Points
    16 320
    Par défaut
    Citation Envoyé par stealth35 Voir le message
    bien joué t'as recrée implode
    Dans cet exemple simple, oui, effectivement .. Mais si on prend l'exemple du post original ça donne ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $liste = $sep = "";
    $i = 0;
     
    foreach($tab_mots_cles as $mc){
       $liste .= $sep . '<span id="'.$i.'">'.$mc.'</span>';
       $i++;
       $sep = ', ';
    }
    Sinon pour utiliser l'implode() il faudrait construire un tableau ..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $liste = array();
    $i = 0;
     
    foreach($tab_mots_cles as $mc){
       $liste[] = '<span id="'.$i.'">'.$mc.'</span>';
       $i++;
    }
     
    implode( ', ', $liste );

  7. #7
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    le $i sert a rien autant utiliser la clé du tableau,
    pour les id HTML ils doivent obligatoirement commencé par une lettre

  8. #8
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 887
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 887
    Points : 16 320
    Points
    16 320
    Par défaut
    Je sais bien. J'ai juste repris l'exemple tel quel.

  9. #9
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    Citation Envoyé par Bisûnûrs Voir le message
    Je sais bien. J'ai juste repris l'exemple tel quel.
    je disais ça pour renaud26

  10. #10
    Expert éminent
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 146
    Points : 9 387
    Points
    9 387
    Par défaut
    Encore qu'on ne sait pas quels sont les index... Ils ne sont peut être pas numériques et ne correspondent peut être aucunement à ce qu'il cherche à faire avec ce $i.

  11. #11
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    Citation Envoyé par transgohan Voir le message
    Encore qu'on ne sait pas quels sont les index... Ils ne sont peut être pas numériques et ne correspondent peut être aucunement à ce qu'il cherche à faire avec ce $i.
    pas grave un array_values est c'est réglé

Discussions similaires

  1. Réponses: 8
    Dernier message: 16/08/2007, 11h40
  2. [GRASP] Est-ce que j'utilise correctement les design pattern?
    Par Tourix dans le forum Design Patterns
    Réponses: 7
    Dernier message: 21/06/2006, 18h27
  3. comment utiliser correctement les sessions?
    Par cladsam dans le forum Langage
    Réponses: 5
    Dernier message: 06/02/2006, 11h56
  4. [C#] Comment utiliser correctement Stream.Read ?
    Par ArChAnGe76 dans le forum Windows Forms
    Réponses: 6
    Dernier message: 20/12/2005, 20h48
  5. Comment utiliser correctement le debugger de DevCPP
    Par Le Furet dans le forum Dev-C++
    Réponses: 2
    Dernier message: 29/09/2005, 09h56

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