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 :

[Système] Méthode plus simple que explode() + foreach()


Sujet :

Langage PHP

  1. #1
    Membre expérimenté
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Points : 1 500
    Points
    1 500
    Par défaut [Système] Méthode plus simple que explode() + foreach()
    Salut,

    J'ai des chaine qui se présentent ainsi:
    1.1 (référence principale)
    1.1.1 (sous référence)
    1.1.2
    ...
    1.1.12
    Ce que que je veux, c'est incrémenter le nombre des sous références qui se situe à la position du dernier nombre de la référence principale
    (dans mon cas, remplacer le 1 de la seconde position par 2)
    Ce que je fais actuellement c'est ça:
    <?php
    $paramRef
    = '1.1'; // Référence principale
    $stringReference = '1.1.12'; // Sous-référence (exemple)
    $arrayRefs = explode('.', $stringReference); // Récupération des nombres
    $intPoints = substr_count($paramRef, '.'); // Nombre de points (pas pratique
    $stringUpdatedRef = ''; // Initialisation
    foreach($arrayRefs AS $intKey => $intRef) {
    &#160;&#160;&#160;#On regarde ici si la clé n'est pas égal au nombre à incrémenter
    &#160;&#160;&#160;#donc (longueur chaine principale) - (nb de points) - 1
    &#160;&#160;&#160;# (-1 car le array comment à 0)
    &#160;&#160;&#160;if ($intKey != (strlen($paramRef) - $intPoints - 1))
    &#160;&#160;&#160;&#160;&#160;&#160;$stringUpdatedRef .= $intRef.'.';
    &#160;&#160;&#160;else
    &#160;&#160;&#160;&#160;&#160;&#160;$stringUpdatedRef .= ($intRef + 1).'.';
    }
    $stringUpdatedRef = substr($stringUpdatedRef, 0, strlen($stringUpdatedRef)-1); // Supression du point final
    ?>
    Colorez votre code PHP sur les forums grâce à Developpez.com

    J'espère que vous comprenez. En tout cas je trouve ça compliqué... Je suis presque sur qu'il y a une autre solution (notamment avec des strpos(), strstr()...) L'ennui c'est que je ne vois pas comment faire.
    Si quelqu'un a une idée, merci.

  2. #2
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 249
    Points : 1 565
    Points
    1 565
    Par défaut
    un p'tit exemple (ou une serie d'exemple) aurait été bien, j'ai du executer le code pour comprendre ce que tu voulais ;o)

    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
    $liste = array(
    '1.1' => '1.1.12',
    '1.2' => '1.2.4',
    '4.56.786' => '4.56.786.1234',
    );
     
    foreach($liste as $k=>$v) {
        $paramRef = $k;
        $stringReference = $v;
     
        $posPremierPoint = strrpos($paramRef, '.')+1;
        $posDernierPoint = strpos($stringReference , '.', $posPremierPoint);
     
        $resultat = substr($stringReference, 0, $posPremierPoint);
        $resultat.= (substr($stringReference, $posPremierPoint, ($posDernierPoint - $posPremierPoint)))+1;
        $resultat.=substr($stringReference, $posDernierPoint);
     
        echo "$k | $v => $resultat<br>";
    }
    mais moi j'aime bien les explode/ implode alors j'aurais plutot fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    foreach($liste as $k=>$v) {
        $tk=explode('.', $k);
        $tv=explode('.', $v);
        $tv[count($tk)-1]++;
        $resultat=implode('.', $tv);
        echo "$k | $v => $resultat<br>";
    }

Discussions similaires

  1. Réponses: 14
    Dernier message: 20/05/2007, 16h44
  2. [Interface d'aide]Plus simple que Javahelp ?
    Par Baptiste Wicht dans le forum Interfaces Graphiques en Java
    Réponses: 10
    Dernier message: 05/05/2006, 16h09
  3. Plus simple que ClassParent
    Par rvzip64 dans le forum Langage
    Réponses: 9
    Dernier message: 18/01/2006, 10h12
  4. [Collections] - Hash de Hash - Méthode plus simple
    Par spidetra dans le forum Collection et Stream
    Réponses: 7
    Dernier message: 30/12/2005, 12h07
  5. [Système] Mozilla plus lent que IE
    Par Halleck dans le forum Langage
    Réponses: 6
    Dernier message: 22/06/2005, 17h26

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