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 :

[Tableaux] Troncage de mot long


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 161
    Par défaut [Tableaux] Troncage de mot long
    Bonjour,

    Je voudrais tronquer certains mots qui peuvent dévisager mon design, par exemple:

    coucou_c_moi_et_toi_comment_ca_boom_la_forme oui moi ca va et toi?

    Cette chaine a un mot tres long.

    je voudrais faire :

    coucou_c_moi... oui moi ca va et toi?

    Comment puis-je faire?

    Merci de votre aide

  2. #2
    Membre éprouvé Avatar de Aliosha
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    124
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 124
    Par défaut
    Il y a des sites sur PHP très bien pour ce t'expliquer à faire que tu demandes (si si...).

    Si tu ne veux tronquer qu'un seul mot (une seule chaîne de caractères, comme ton premier mot), utilise substr('ton_mot', '0', '10'); où 0 est le départ de la chaîne, et dix le nombres de caractères que tu veux retenir.

    Des infos ici.

  3. #3
    Membre confirmé

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 161
    Par défaut
    merci je connais ces sites .

    mais je me suis mal expliquer,

    coucou_c_moi_et_toi_comment_ca_boom_la_forme oui moi ca va et toi? coucou_c_moi_yop_ca_boom_la_forme oui moi ca va et toi?

    Il faut que cela le fasse même au milieu de la chaine, pour un mot trop long que ça le tronque. et c'est la mon problème

    Et la substr marche plus sniff

    J'ai penser à faire un explode et mettre l'ensemble de la chaine dans un tableau pour ensuite faire un substr mais c'est assez lourd en traitement php et ca prend beaucoup de mémoire, existe t'il quelque chose de mieux?

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 060
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 060
    Par défaut
    Bonjour,

    Tu peux faire un truc dans ce genre :
    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
     
    <?php
    	$nbCar = 12;
    	$chaine = 'coucou_c_moi_et_toi_comment_ca_boom_la_forme oui moi ca va et toi?';	
    	echo "$chaine<br>";
     
    	$mot = explode(' ', $chaine);
    	foreach ($mot as $cle => $valeur)
    	{
    		if (strlen($valeur) > $nbCar)
    			$mot[$cle] = substr($valeur, 0, $nbCar) . ' ...';
    	}
     
    	$chaine = implode(' ', $mot);
    	echo "$chaine<br>";
    ?>

  5. #5
    Membre confirmé

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 161
    Par défaut
    merci, bon je vais faire ca, même si j'ai peur que ca prenne bcp d'énergie à l'apache lol

  6. #6
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Par défaut
    Avec les expressions régulières :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php
    define('MAX_LEN', 12);
    $texte = "coucou_c_moi_et_toi_comment_ca_boom_la_forme oui moi ca va et toi?";
    echo preg_replace('/\b([^\s]{' . MAX_LEN . ',})\b/Ue', 'substr("\1", 0, ' . MAX_LEN . ') . "..."', $texte);
    ?>

  7. #7
    Membre confirmé

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 161
    Par défaut
    Merci champion exactement ce que je voulais

  8. #8
    Membre Expert

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 060
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 060
    Par défaut
    Je n'ai pas pensé aux expressions régulières, car je connais très mal.

    Mais je viens de faire un test, et il semblerait que le temps d'éxécution soit beaucoup plus important qu'avec explode et implode : un rapport de l'ordre de 1 à 2 ou 3 (sur la chaine donnée en exemple).

  9. #9
    Membre émérite Avatar de FCYPBA
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 745
    Par défaut
    Citation Envoyé par jeca
    Je n'ai pas pensé aux expressions régulières, car je connais très mal.

    Mais je viens de faire un test, et il semblerait que le temps d'éxécution soit beaucoup plus important qu'avec explode et implode : un rapport de l'ordre de 1 à 2 ou 3 (sur la chaine donnée en exemple).

    On doit pouvoir améliorer ton code en utilisant la fonction str_word_count()

    Je vais de ce pas faire un exemple

  10. #10
    Membre expérimenté Avatar de daniel61
    Inscrit en
    Décembre 2006
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 139
    Par défaut
    Citation Envoyé par jeca
    Je n'ai pas pensé aux expressions régulières, car je connais très mal.

    Mais je viens de faire un test, et il semblerait que le temps d'éxécution soit beaucoup plus important qu'avec explode et implode : un rapport de l'ordre de 1 à 2 ou 3 (sur la chaine donnée en exemple).
    ne t'empêche pas d'apprendre les expressions régulières sur une conclusion hâtive.

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    set_time_limit(0);
    $boucle=100000; // cent milles
    $nbCar = 12;
    $chaine = 'coucou_c_moi_et_toi_comment_ca_boom_la_forme oui moi ca va et toi?';
    echo "$chaine<br>-----<br>";
     
    // Méthode avec explode/implode avec substr.
    $t1=time();
    for($i=0;$i<$boucle;$i++) {
    	$mot = explode(' ', $chaine);
    	foreach ($mot as $cle => $valeur)
    	{
    		if (strlen($valeur) > $nbCar)
    			$mot[$cle] = substr($valeur, 0, $nbCar) . ' ...';
    	}
    	$sortie = implode(' ', $mot);
    }
    echo "$sortie<br>";
    echo 'temps implode/explode: '.(time()-$t1).' sec<br>-----<br>';
     
    // Méthode avec preg_replace avec option e pour accéder à substr.
    $t1=time();
    for($i=0;$i<$boucle;$i++) {
        $sortie = preg_replace('/\b([^\s]{' . $nbCar . ',})\b/Ue', 'substr("\1", 0, ' . $nbCar . ') . "..."', $chaine);
    }
    echo "$sortie<br>";
    echo 'temps preg_replace avec option e: '.(time()-$t1).' sec<br>-----<br>';
     
    // Méthode avec preg_replace 100% regex
    $t1=time();
    for($i=0;$i<$boucle;$i++) {
        $sortie=preg_replace('/([^\s]{'.$nbCar.'})[^\s]+/','\\1...',$chaine);
    }
    echo "$sortie<br>";
    echo 'temps preg_replace 100% regex: '.(time()-$t1).' sec<br>-----<br>';

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 16/01/2008, 13h12
  2. [Tableaux] Chiffrer les mots de passe
    Par fourniey dans le forum Langage
    Réponses: 6
    Dernier message: 19/09/2007, 00h39
  3. [Tableaux] Afficher un mot au hasard parmi une liste
    Par Chipsssit dans le forum Langage
    Réponses: 7
    Dernier message: 19/05/2007, 14h05
  4. Réponses: 4
    Dernier message: 03/08/2006, 16h25
  5. Réponses: 11
    Dernier message: 27/06/2006, 20h21

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