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] Position d'un caractère selon son nombre d'occurences


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Janvier 2004
    Messages
    533
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 533
    Par défaut [Tableaux] Position d'un caractère selon son nombre d'occurences
    Bonjour,

    Je possède une variable qui peut contenir par exemple la chaine "0_173_174_175".
    Je cherche à créer une fonction me retournant la position du caractère $car, dans la chaine $chaine, mais à sa n ième occurence dans la chaine.
    En reprenant l'exemple ci dessus, j'aimerais récupérer la position du 3e "_" dans la chaine.

    Merci d'avance pour votre aide !

  2. #2
    Membre chevronné Avatar de XtofRoland
    Profil pro
    Inscrit en
    Août 2005
    Messages
    357
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2005
    Messages : 357
    Par défaut
    l'equivalent de la fonction INSTR(chaine, sschaine[, index][, occurence]) de oracle?
    int strpos ( string haystack , string needle , int offset )
    a tester

  3. #3
    Membre éclairé
    Inscrit en
    Janvier 2004
    Messages
    533
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 533
    Par défaut
    Cette fonction retourne la position de la première occurrence d'un caractère dans une chaîne à partir de la position spécifiée... donc ce n'est pas exactement cela...

    Voici celle que j'ai créée pour mes besoins :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function pos_niveau($chaine, $car, $nb)
    {
    $pos_rech = 0;
    $nb = $nb - 1;
     
    for($index=1;$index<=$nb;$index++)
    {
    $pos_rech = strpos($chaine, $car, $pos_rech) + 1;
    }
    return $pos_rech - 1;
    }
    Merci de ton aide !

  4. #4
    Membre émérite
    Avatar de Linaa
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    987
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 987
    Par défaut
    Pour la dernière occurence, c'est la fonction strrpos()

  5. #5
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Par défaut
    Salut

    Je pense que l'idée serait de tokeniser ta chaîne à partir de ton caractère et, lors du parcours, d'additionner la longueur de chaque token (plus celle de ton caractère) tout en comptant le nombre de fois que tu as bouclé (à moins que tu utilises split(), auquel cas utiliser l'index du tableau sera suffisant).

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 792
    Par défaut
    Ou, à l'ancienne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function pos_niveau($chaine, $car, $nb){
      $imax =  strlen($chaine);
      for($i = 0; $i <= $imax; $i++){
        if ($chaine[$i] == $car){
          $count++;
          if ($count == $nb){
            return $i; 
          }
        }
      }
    }

  7. #7
    Rédacteur
    Avatar de marcha
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 571
    Par défaut
    Où à la mode de chez nous :-)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    function strposn($haystack, $c, $n) {
      $a = explode($c, $haystack, $n+1);
      if($n<=0 || count($a)<=$n) return false;
      return strlen($haystack) - strlen($a[$n]) - 1;
    }

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

Discussions similaires

  1. trier un array selon le nombre d'occurence
    Par thib3113 dans le forum Langage
    Réponses: 1
    Dernier message: 22/05/2012, 01h57
  2. Comment récupérer une chaine de caractère selon son début et sa fin?
    Par neo62matrix dans le forum Général Python
    Réponses: 3
    Dernier message: 21/03/2012, 10h08
  3. Réponses: 4
    Dernier message: 09/09/2009, 10h59
  4. Réponses: 10
    Dernier message: 01/08/2009, 02h02
  5. Réponses: 26
    Dernier message: 06/06/2006, 23h15

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