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] Trouver la chaine la plus grande dans une variable


Sujet :

Langage PHP

  1. #1
    Membre confirmé

    Profil pro
    Inscrit en
    Août 2007
    Messages
    496
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 496
    Points : 467
    Points
    467
    Par défaut [Tableaux] Trouver la chaine la plus grande dans une variable
    Voila le titre n'est peut être pas explicite, mais voici plus d'explications.

    En fait j'ai une variable

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $variable = "un#deux#trois#quarante#dix";
    Comment faire pour compter et trouver la chaîne la plus grande situé entre # et #, qui est dans ce cas quarante qui retournerai 8.

    Je sais compter le nombre de caractère avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $str = 'abcdef';
    echo strlen($str); // 6
    $str = ' ab cd ';
    echo strlen($str); // 7


    Avant de poster faites une recherche et/ou consultez la FAQ.

    Un sujet est résolu n'oubliez pas le tag

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu peux utiliser explode() puis array_walk() et sort()
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre confirmé

    Profil pro
    Inscrit en
    Août 2007
    Messages
    496
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 496
    Points : 467
    Points
    467
    Par défaut
    Ok merci sabotage ça peut marcher !

    J'ai donc essayer ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $variable= "un#deux#trois#quarante#dix";
    $chaine = explode("#", $variable);
    $str = '$chaine[3]';
    echo strlen($str);
    Mais deux problèmes se pose alors :

    1. $str retourne 10 (ce n'est pas bien grave) alors que la chaîne fait 8 caractères

    2. comment faire si a la base je ne connais la plus grande chaîne ?


    Avant de poster faites une recherche et/ou consultez la FAQ.

    Un sujet est résolu n'oubliez pas le tag

  4. #4
    Rédacteur
    Avatar de RideKick
    Homme Profil pro
    Directeur technique
    Inscrit en
    Septembre 2006
    Messages
    5 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Septembre 2006
    Messages : 5 914
    Points : 12 572
    Points
    12 572
    Par défaut
    ton code est faux , tu compte le nombre de caractères de la chaine '$chaine[3]' et non du contenu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $variable= "un#deux#trois#quarante#dix";
    $chaine = explode("#", $variable);
    echo strlen($chaine[3]);
    Pas de questions techniques en MP please

    Mon site perso

    Mon profil Viadeo

  5. #5
    Membre confirmé

    Profil pro
    Inscrit en
    Août 2007
    Messages
    496
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 496
    Points : 467
    Points
    467
    Par défaut
    C'est juste RideKick ça fonctionne bien mieux comme ça.

    Comment faire pour détecter la plus grande chaîne sachant que cette variable peut changer ?


    Avant de poster faites une recherche et/ou consultez la FAQ.

    Un sujet est résolu n'oubliez pas le tag

  6. #6
    Rédacteur
    Avatar de RideKick
    Homme Profil pro
    Directeur technique
    Inscrit en
    Septembre 2006
    Messages
    5 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Septembre 2006
    Messages : 5 914
    Points : 12 572
    Points
    12 572
    Par défaut
    tu peux utiliser array_walk() pour appliquer le comptage sur chaque éléments de ton tableau comme te l a conseillé sabotage.

    Tu peux aussi le faire a l 'ancienne cad parcourir ton tableau et comparer la chaine à la précédente en gardant en mémoire le nombre de caractère de la plus grande chaine et sa position dans le tableau .
    Pas de questions techniques en MP please

    Mon site perso

    Mon profil Viadeo

  7. #7
    Membre confirmé

    Profil pro
    Inscrit en
    Août 2007
    Messages
    496
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 496
    Points : 467
    Points
    467
    Par défaut
    Voila en m'inspirant des exemples fourni dans le lien j'ai fait ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $variable= "un#deux#trois#quarante#dix";
    $chaine = explode("#", $variable);
    function test_print ($item2, $key) {
        echo "$key. $item2<br />\n";
    }
    array_walk ($chaine, 'test_print');
    qui me retourne :

    0. un
    1. deux
    2. trois
    3. quarante
    4. dix

    Après je bloque pour rechercher la chaîne la plus grande


    Avant de poster faites une recherche et/ou consultez la FAQ.

    Un sujet est résolu n'oubliez pas le tag

  8. #8
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    rahhhh il faut lire mon message en entier.
    Tu utilises rsort(), ton plus grand element sera le premier.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  9. #9
    Rédacteur
    Avatar de RideKick
    Homme Profil pro
    Directeur technique
    Inscrit en
    Septembre 2006
    Messages
    5 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Septembre 2006
    Messages : 5 914
    Points : 12 572
    Points
    12 572
    Par défaut
    Moi j'aurais fais a l'ancienne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $variable = "un#deux#trois#quarante#dix";
    $chaine = explode("#", $variable);
    $max = 0;
    foreach ($chaine as $clef => $valeur) {
     
        if (strlen($valeur) > $max) {
            $nbMax = strlen($valeur);
            $index = $clef;
        }
    }
     
    echo "La chaine la plus longue comporte $max caractères et est : $chaine[$index]";
    pas testé
    Pas de questions techniques en MP please

    Mon site perso

    Mon profil Viadeo

  10. #10
    Membre confirmé

    Profil pro
    Inscrit en
    Août 2007
    Messages
    496
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 496
    Points : 467
    Points
    467
    Par défaut
    Citation Envoyé par sabotage Voir le message
    rahhhh il faut lire mon message en entier.
    Tu utilises rsort(), ton plus grand element sera le premier.
    J'ai tester ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $variable= "un#deux#trois#quarante#dix";
    $chaine = explode("#", $variable);
    rsort ($chaine);
    function test_print ($item2, $key) {
        echo "$key. $item2<br />\n";
    }
    array_walk ($chaine, 'test_print');
    et ça affiche :

    0. un
    1. trois
    2. quarante
    3. dix
    4. deux

    Je ne comprend pas ou mettre tous ça en fait ! (je ne connai pas trop le PHP)

    Pour RideKick ton code affiche :

    La chaine la plus longue comporte 0 caractères et est : dix

    et en fait il faut que soit affiché :

    La chaine la plus longue comporte 8 caractères et est : quarante


    Avant de poster faites une recherche et/ou consultez la FAQ.

    Un sujet est résolu n'oubliez pas le tag

  11. #11
    Membre régulier
    Inscrit en
    Août 2006
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 79
    Points : 87
    Points
    87
    Par défaut
    Hello, RideKick avait raison, il y a juste une petite faute dans son code.

    Voila le code corrigé:

    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
    <?php
    $variable = "un#deux#trois#quarante#dix";
    $chaine = explode("#", $variable);
    $max = 0;
    foreach ($chaine as $clef => $valeur) {
     
        if (strlen($valeur) > $max) {
            $max = strlen($valeur);
            $index = $clef;
        }
    }
     
    echo "La chaine la plus longue comporte $max caractères et est : $chaine[$index]";
     
    ?>

  12. #12
    Rédacteur
    Avatar de RideKick
    Homme Profil pro
    Directeur technique
    Inscrit en
    Septembre 2006
    Messages
    5 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Septembre 2006
    Messages : 5 914
    Points : 12 572
    Points
    12 572
    Par défaut
    Dans mon code il y a une erreur , il faut remplacer $nbMax par $max ^^ un peu de reflection sur le code donné et tu aurais trouvé ....
    Pas de questions techniques en MP please

    Mon site perso

    Mon profil Viadeo

  13. #13
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    J'ai quand meme fini mon devoir moi aussi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php
    $variable= "un#deux#trois#quarante#dix";
    $chaine = explode("#", $variable);
     
    foreach ($chaine as $value) {
    	$tableau[strlen($value)] = $value; 
    }
    krsort($tableau);
    $top = each($tableau);
    echo 'Le plus grand est ' . $top['value'] . ' avec ' . $top['key'];
    ?>
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  14. #14
    Membre confirmé

    Profil pro
    Inscrit en
    Août 2007
    Messages
    496
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 496
    Points : 467
    Points
    467
    Par défaut
    Citation Envoyé par RideKick Voir le message
    Dans mon code il y a une erreur , il faut remplacer $nbMax par $max ^^ un peu de reflection sur le code donné et tu aurais trouvé ....
    Tu as raison un peu de réflexion m'aurais permis de trouver, j'ai vu tellement de code ce matin que $nbMax et $max n'avais aucune différence pour moi

    Les 2 variantes de code fonctionnent



    Avant de poster faites une recherche et/ou consultez la FAQ.

    Un sujet est résolu n'oubliez pas le tag

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

Discussions similaires

  1. Critère "le plus grand" dans une requête Access
    Par triistaan dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 24/01/2015, 18h23
  2. Déterminer la Valeur la plus grande dans une table
    Par arnaud_verlaine dans le forum Langage SQL
    Réponses: 9
    Dernier message: 22/08/2014, 23h35
  3. Trouver la valeur la plus proche dans une ligne
    Par tavita987 dans le forum Excel
    Réponses: 5
    Dernier message: 05/02/2014, 11h12
  4. Trouver le mot le plus long dans une chaîne
    Par bassoum dans le forum x86 16-bits
    Réponses: 1
    Dernier message: 02/11/2008, 10h45
  5. Réponses: 7
    Dernier message: 20/04/2007, 16h42

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