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 :

Couper une chaine à un certain caractère suivi de chiffre [PHP 5.2]


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    407
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Mai 2003
    Messages : 407
    Points : 117
    Points
    117
    Par défaut Couper une chaine à un certain caractère suivi de chiffre
    Bonjour,
    je suis la recherche d'une fonction me permettant de couper une chaine à un caractere donné suivi de chiffre
    actuellement j'ai fait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     $var =  explode('-t', $chaine)
    mais j'ai oublié que ma chaine pouvait etre composer comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    depannage-tv-numerique-t583983.html
    il coupe alors au premier -t rencontre hors je voudrais qu'il coupe au dernier
    merci d'avance pour votre aide
    Ludo

  2. #2
    Membre confirmé Avatar de humitake
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2010
    Messages
    399
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2010
    Messages : 399
    Points : 578
    Points
    578
    Par défaut
    Bonjour,

    En fait ce n'est pas vraiment un problème en soit mais il y a deux façon :


    Tu veux garder uniquement le bout de chaine avec les numéros.
    Dans ce cas il te suffit de récuperer uniquement le dernier tableau de ton explode et le tour est joué !
    $var[sizeof($var) - 1];


    Tu veux garder les deux bouts (les numéros mais également ce qui est avant) dans ce cas il te suffit de reconstruire cette chaîne toi même :
    Code php : 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
    $chaine = "depannage-tv-numerique-t583983.html";
    $tab = explode($chaine);
    /* On a donc :
     * $tab[0] = depannage
     * $tab[1] = v-numerique
     * $tab[2] = 583983.html
     */
     
    //La partie qui t’intéresse est donc la dernière
    $ceQueJeVeux = $tab[sizeof($tab) - 1];
     
    //Reconstitution du reste de la chaîne
    $ceQuiReste = "";
    for($i = 0; $i < sizeof($tab) - 2; $i++)
        $ceQuiReste .= $tab[$i] . '-t';
    //Un '-t' est peut être en trop à la fin de la chaîne, je ne sais pas si tu veux le garder. Si ce n'est pas le cas :
    $ceQuiReste = substr($ceQuiReste, 0, -2); //Supprime les deux derniers caractères (-t)

  3. #3
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Heu...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    $a = "depannage-tv-numerique-t583983.html";
    $b = "depannage-t583983.html";
     
    $split = explode('-t', $a);
    $after = array_pop($split);
    $before = implode('-t', $split);
     
    var_dump($before,$after);
     
    $split = explode('-t', $b);
    $after = array_pop($split);
    $before = implode('-t', $split);
     
    var_dump($before,$after);
    Faut pas se compliquer la vie...

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    407
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Mai 2003
    Messages : 407
    Points : 117
    Points
    117
    Par défaut
    merci pour ta réponse en faite il me faut pratiquement tout garder c'est suite à une migration de mon forum, les urls ont changés et je ne veux pas perdre mon référencement je souhaite mettre des redirections 301...

    mon but est d'avoir : 583983-depannage-tv-numerique

  5. #5
    Membre confirmé Avatar de humitake
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2010
    Messages
    399
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2010
    Messages : 399
    Points : 578
    Points
    578
    Par défaut
    Au temps pour moi je ne connaissait pas la fonction array_pop.

    Très pratique

  6. #6
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $a = "depannage-tv-numerique-t583983.html";
    $split = explode('-t', $a);
    $num = preg_replace('~\.\w+~', '', array_pop($split));
    $new = $num . "-". implode('-t', $split);
     
    echo $new;
    ce qui, en réalité, se résume à:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo preg_replace('~(.*)(-t[0-9]+)\.html~', '$2-$1', $a);
    arf

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    407
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Mai 2003
    Messages : 407
    Points : 117
    Points
    117
    Par défaut
    je viens de tester ce bout de code et cela ne fonctionne pas tout le temps

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    	$page = $_SERVER['REQUEST_URI'];
    	$page = explode('/f/',$page);
     
    	$split = explode('-t', $page[1]);
    	$after = array_pop($split);
    	$before = implode('-t', $split);
    	$after = explode('.',$after);
     
    	header("Status: 301 Moved Permanently", false, 301);   
    	header ('Location: http://www.lelectronique.com/forum-electronique/threads/'.$after[0].'-'.$before);
    url testé : electroforum.info/f/panne-alimentation-tv-proline-t24559.html
    renvoi vers : lelectronique.com/forum-electronique/threads/v-proline-panne-alimentation


  8. #8
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    ok qu'est ce que tu dis de ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $a = "depannage-tv-numerique.html";
    $b = "depannage-tv-numerique-t1654978.html";
     
    $pattern = array('~(.*)-t([0-9]+)\.\w+~', '~\.\w+~');
    $replace = array('$2-$1', '');
     
    echo preg_replace($pattern, $replace, $a);
    echo preg_replace($pattern, $replace, $b);

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    407
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Mai 2003
    Messages : 407
    Points : 117
    Points
    117
    Par défaut
    euh autant pour moi le bout de code que j'ai mis en erreur fonctionne correctement problème de cache avec FF à priori...

    merci beaucoup pour votre aide

  10. #10
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    vérifie que les expressions régulières que je viens de mettre fonctionne dans ton cas, c'est quand même un poil plus propre

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

Discussions similaires

  1. couper une chaine de caractère
    Par greg26 dans le forum VB.NET
    Réponses: 2
    Dernier message: 04/10/2007, 15h11
  2. Couper une chaine de caractère
    Par Matmal11 dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 19/06/2007, 09h41
  3. couper une chaine de caractère en deux ?
    Par fmh1982 dans le forum C++
    Réponses: 3
    Dernier message: 31/03/2007, 18h17
  4. Couper une chaine de caractères
    Par perldebutant dans le forum Langage
    Réponses: 2
    Dernier message: 13/07/2006, 00h06
  5. Couper une chaine de caractère
    Par Spacio dans le forum Access
    Réponses: 2
    Dernier message: 28/06/2006, 18h06

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