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 :

Remplir un array automatiquement et trier. [PHP 7]


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Homme Profil pro
    recherche d'emploi
    Inscrit en
    Avril 2022
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : recherche d'emploi

    Informations forums :
    Inscription : Avril 2022
    Messages : 88
    Points : 48
    Points
    48
    Par défaut Remplir un array automatiquement et trier.
    Bonjour,
    Grace à vous tous et aux tutos de ce site, je viens de valider un CDD.
    Mon nouveau poste comporte 3 missions différentes en même temps.(piti mouton à 5 pattes!!!).

    Maintenant il faut vraiment que j'apprenne à faire des tableaux.

    J'ai vu qu'il faut désigner un separator pour découper une chaine en tableau.
    Dans ma chaine les infos à mettre dans un tableau sont entre deux crochets.
    [fdsjlfjflsjs][jkouieoruiur].
    Quand je fais appel à separator, aucune info ne remonte de IntelliSense.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $tableau = [ADC_START][HD][PMAD][USER_CMDB_DIF_NON][SFW_  < ASSET_XXX > < TPX _1 > ][RDV_NON][NO COMMENT][21/04/22-10:49][CHEKSOUN][Version_2.02][ADC_END]  ;
    if (strpos($tableau,'[RDV_NON]') !== false){
    $tri = "[""]", $tableau);
    $1 = $tableau[0];// donne [
    $2 = $tableau[1];// donne A
    $3 = $tableau[2];// donne D
    }
    // ----------------- Pour memo à faire une fois le tableau réalisé
    // trier les balises suivant leur contenue Si [RDV_NON] mettre en ordre et ajouter un deuxième [RDV_NON]. Sinon mettre dans l'ordre.
    // [ADC_START][SDP][GUICHET][DEM][USER_CMDB_DIF_NON][RDV_NON][RDV_NON][RSDP_NON][SFW_  < ASSET_XXX > < TPX _1 > ][NO COMMENT][21/04/22-10:49][CHEKSOUN][Version_2.02][ADC_END]  ;
    // ----------------- END MEMO
    Je n'arrive pas à trouver d'infos pour créer le tableau automatiquement en sélectionnant les crochets.
    Sachant que la chaine de caractères peut comporter entre 10 et 50 balises.
    J'ai compris qu'il faudra passer par la boucle For.

    Mais tant que je ne sais pas couper ma chaine entre les crochets.

    Merci.

  2. #2
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 835
    Points
    2 835
    Par défaut
    Bonjour,

    Evitez de trop modifier le code quand vous le donnez sur le forum ou alors vérifiez-le car il y a des grosses erreurs dans ce qui est présenté :
    1 : La première ligne est un string j'imagine ? Parce que là c'est surtout une fatal error
    2 : qu'est-ce donc cette ligne N°4 ? Il manque le nom d'une fonction et la parenthèse ouvrante, non ?

    Sinon voici un bout de code qui split une chaine selon l'ouverture d'un crochet et qui va ensuite retirer le crochet fermant et mettre tout dans un tableau :

    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
    18
    19
    20
    <?php
     
    $string = "[ADC_START][HD][PMAD][USER_CMDB_DIF_NON][SFW_  < ASSET_XXX > < TPX _1 > ][RDV_NON][NO COMMENT][21/04/22-10:49][CHEKSOUN][Version_2.02][ADC_END]";
     
    // Définition du tableau final
    $clean_array = [];
     
    // On split la chaine selon les crochets ouvrants
    $string_to_array = preg_split('#\[#i', $string);
     
    foreach ($string_to_array AS $v) {
        // On nettoie le string pour retirer le crochet fermant
        $str = trim(str_replace(']', '', $v));
        // Si la chaine n'est pas vide, on l'ajoute à notre tableau final
        if (!empty($str)) {
            $clean_array[] = $str;
        }
    }
     
    echo PHP_EOL . '<pre>$clean_array: ' . print_r($clean_array, true) . '</pre>' . PHP_EOL;

    Affichera :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    $clean_array: Array
    (
        [0] => ADC_START
        [1] => HD
        [2] => PMAD
        [3] => USER_CMDB_DIF_NON
        [4] => SFW_  < ASSET_XXX > < TPX _1 >
        [5] => RDV_NON
        [6] => NO COMMENT
        [7] => 21/04/22-10:49
        [8] => CHEKSOUN
        [9] => Version_2.02
        [10] => ADC_END
    )

    Sinon, il y a également moyen de faire ça en une seule ligne mais c'est plus difficile à comprendre :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    preg_match_all('#\[([^\[]+)\]#', $string, $matches);
    echo PHP_EOL . '<pre>$matches: ' . print_r($matches[1], true) . '</pre>' . PHP_EOL;

    Le résultat se trouve dans $matches[1] cette fois-ci.
    Ce code utilise ce qu'on appelle les "regex" c'est à dire les "expressions régulières".
    La regex ici capture tout ce qui est entre crochet ouvrant (\[) et fermant (\]); les crochets étant utilisés dans les regex, il faut les échapper pour les matcher
    Pour capturer entre les crochets, on va dire qu'on veut sélectionner "n'importe quoi jusqu'au prochain crochet fermant" ([^\]]+)
    Pour grouper les résultats, on les met entre parenthèses. Il y a un seul groupe de capture (une seule paire de parenthèse), c'est pour ça que le résultat est dans $matches[1], c'est pour afficher le groupe 1

  3. #3
    Membre du Club
    Homme Profil pro
    recherche d'emploi
    Inscrit en
    Avril 2022
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : recherche d'emploi

    Informations forums :
    Inscription : Avril 2022
    Messages : 88
    Points : 48
    Points
    48
    Par défaut
    Bonjour darkstar123456,
    Désolé pour mon code illisible, je ferai attention.
    Merci beaucoup pour les infos, et surtout pour le partage de votre travail.
    Je vais sérieusement étudier le code. Il est vrai que je n'avais pas pensé au regex.
    Encore merci pour votre travail.

  4. #4
    Membre du Club
    Homme Profil pro
    recherche d'emploi
    Inscrit en
    Avril 2022
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : recherche d'emploi

    Informations forums :
    Inscription : Avril 2022
    Messages : 88
    Points : 48
    Points
    48
    Par défaut
    Bonjour darkstar123456,
    Désolé de revenir si tard, mais dur dur la première semaine.
    Voici ce que j'ai fait.
    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    <?php
     
    $string = "[ADC_START][SDP][GUICHET][DEM][USER_CMDB_DIF_NON][DEM_PDT_PCF < ASSET_XXX> < TPX_1>][DEM_PDT_PCF < ASSET_XXX> < TPX_1>][DEM_PDT_PCF < ASSET_XXX> < TPX_1>][DEM_PDT_PCF < ASSET_XXX> < TPX_1>][DEM_PDT_PCF < ASSET_XXX> < TPX_1>][DEM_PDT_PCF < ASSET_XXX> < TPX_1>][DEM_PDT_PCF < ASSET_XXX> < TPX_1>][DEM_PDT_PCF < ASSET_XXX> < TPX_1>][PRT_PRP < ASSET_ XXX < TPX_1>]7 [SFW_TLD < TPX_1 > ][RDV_NON][RDV_BAL][RSDP_NON][NO COMMENT][19f16457][22/04/22-17:12][Version_2.02][ADC_END]  ";
     
    // Définition du tableau final
    $clean_array = [];
     
    // On split la chaine selon les crochets ouvrants
    $string_to_array = preg_split('#\[#i', $string);
     
    foreach ($string_to_array AS $v) {
        // On nettoie le string pour retirer le crochet fermant
        $str = trim(str_replace(']', '', $v));
        // Si la chaine n'est pas vide, on l'ajoute à notre tableau final
        if (!empty($str)) {
            $clean_array[] = $str;
        }
    }
     
    //echo PHP_EOL . '<pre>$clean_array: ' . print_r($clean_array, true) . '</pre>' . PHP_EOL;
    ?>
    <br/><br/>
    ------------------------  Recherche des donnees.
    <br/><br/>
    <?php
    $tab = $clean_array;
    if(in_array('RDV_NON',$tab)){
    //------------------------  array_slice
    $input =$tab;
    // retourne chaine complète sans le numéro de la dernière balise.
    $output = array_slice($input, 0);         
     
     
    // notez les clés d'index différentes
     
    echo 'trouvé ARRAY ==> ';
    print_r(array_slice($input,0));
    // print_r(array_slice($input, 2, -1, true));
     
     
    }
    else{
    echo 'pas trouvé';
    }
    ?>
    Cela affiche:
    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
    trouvé ARRAY ==> Array (
    	[0] => ADC_START
    	[1] => SDP
    	[2] => GUICHET
    	[3] => DEM
    	[4] => USER_CMDB_DIF_NON
    	[5] => DEM_PDT_PCF < ASSET_XXX> < TPX_1>
    	[6] => DEM_PDT_PCF < ASSET_XXX> < TPX_1>
    	[7] => DEM_PDT_PCF < ASSET_XXX> < TPX_1>
    	[8] => DEM_PDT_PCF < ASSET_XXX> < TPX_1>
    	[9] => DEM_PDT_PCF < ASSET_XXX> < TPX_1>
    	[10] => DEM_PDT_PCF < ASSET_XXX> < TPX_1>
    	[11] => DEM_PDT_PCF < ASSET_XXX> < TPX_1>
    	[12] => DEM_PDT_PCF < ASSET_XXX> < TPX_1>
    	[13] => PRT_PRP < ASSET_ XXX < TPX_1>7
    	[14] => SFW_TLD < TPX_1 >
    	[15] => RDV_NON
    	[16] => RDV_BAL
    	[17] => RSDP_NON
    	[18] => NO COMMENT
    	[19] => 19f16457
    	[20] => 22/04/22-17:12
    	[21] => Version_2.02
    	[22] => ADC_END
    )
    Mais je ne sais récupérer la clé d'index de la balise recherchée, pour tout reclasser.
    Car il faudrait que la chaine soit ainsi
    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
     Array (
    	[0] => ADC_START
    	[1] => SDP
    	[2] => GUICHET
    	[3] => DEM
    	[4] => USER_CMDB_DIF_NON
    	[15] => RDV_NON
    	[16] => RDV_BAL
    	[17] => RSDP_NON[/B]
    	[5] => DEM_PDT_PCF < ASSET_XXX> < TPX_1>
    	[6] => DEM_PDT_PCF < ASSET_XXX> < TPX_1>
    	[7] => DEM_PDT_PCF < ASSET_XXX> < TPX_1>
    	[8] => DEM_PDT_PCF < ASSET_XXX> < TPX_1>
    	[9] => DEM_PDT_PCF < ASSET_XXX> < TPX_1>
    	[10] => DEM_PDT_PCF < ASSET_XXX> < TPX_1>
    	[11] => DEM_PDT_PCF < ASSET_XXX> < TPX_1>
    	[12] => DEM_PDT_PCF < ASSET_XXX> < TPX_1>
    	[13] => PRT_PRP < ASSET_ XXX < TPX_1>7
    	[14] => SFW_TLD < TPX_1 >
    	[18] => NO COMMENT
    	[19] => 19f16457
    	[20] => 22/04/22-17:12
    	[21] => Version_2.02
    	[22] => ADC_END
    )
    Merci.

  5. #5
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 382
    Points : 5 732
    Points
    5 732
    Billets dans le blog
    1
    Par défaut
    Bonjour,
    je suis loin de maîtriser comme darkstar123456, néanmoins pour extraire les index, je pense que tu peux faire comme ça (j'ai repris ton code sans l'analyser en profondeur) :

    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
    18
    19
    $string = "[ADC_START][SDP][GUICHET][DEM][USER_CMDB_DIF_NON][DEM_PDT_PCF < ASSET_XXX> < TPX_1>][DEM_PDT_PCF < ASSET_XXX> < TPX_1>][DEM_PDT_PCF < ASSET_XXX> < TPX_1>][DEM_PDT_PCF < ASSET_XXX> < TPX_1>][DEM_PDT_PCF < ASSET_XXX> < TPX_1>][DEM_PDT_PCF < ASSET_XXX> < TPX_1>][DEM_PDT_PCF < ASSET_XXX> < TPX_1>][DEM_PDT_PCF < ASSET_XXX> < TPX_1>][PRT_PRP < ASSET_ XXX < TPX_1>]7 [SFW_TLD < TPX_1 > ][RDV_NON][RDV_BAL][RSDP_NON][NO COMMENT][19f16457][22/04/22-17:12][Version_2.02][ADC_END]  ";
     
    // Définition du tableau final
    $clean_array = [];
     
    // On split la chaine selon les crochets ouvrants
    $line=0;
    $string_to_array = preg_split('#\[#i', $string);
    foreach ($string_to_array AS $v) {
        $line++;
     
        // On nettoie le string pour retirer le crochet fermant
        echo "line=".$line."<br/>";
        $str = trim(str_replace(']', '', $v));
        // Si la chaine n'est pas vide, on l'ajoute à notre tableau final
        if (!empty($str)) {
            $clean_array[] = $str;
        }
    }
    La valeur de l'index est dans la variable $line
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  6. #6
    Membre du Club
    Homme Profil pro
    recherche d'emploi
    Inscrit en
    Avril 2022
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : recherche d'emploi

    Informations forums :
    Inscription : Avril 2022
    Messages : 88
    Points : 48
    Points
    48
    Par défaut
    Bonjour LaurentSc,

    Je vais tester.
    Merci.

  7. #7
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 382
    Points : 5 732
    Points
    5 732
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par wisefun77 Voir le message
    Je vais tester.
    Merci.
    Et alors ?
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  8. #8
    Membre du Club
    Homme Profil pro
    recherche d'emploi
    Inscrit en
    Avril 2022
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : recherche d'emploi

    Informations forums :
    Inscription : Avril 2022
    Messages : 88
    Points : 48
    Points
    48
    Par défaut
    Bonjour LaurentSc,
    Désolé mais je n'ai pu tester, je suis sur une autre mission pour le moment.
    Merci.

  9. #9
    Membre du Club
    Homme Profil pro
    recherche d'emploi
    Inscrit en
    Avril 2022
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : recherche d'emploi

    Informations forums :
    Inscription : Avril 2022
    Messages : 88
    Points : 48
    Points
    48
    Par défaut
    Bonjour LaurentSc,

    Merci, cela remonte bien le numéro de lingne.

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

Discussions similaires

  1. [MySQL] Remplir un array() avec des données issues d'une bdd
    Par fichtre! dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 18/12/2006, 17h03
  2. Réponses: 14
    Dernier message: 27/10/2006, 23h15
  3. Réponses: 14
    Dernier message: 17/05/2006, 17h16
  4. [VB.NET] Comment remplir un Array
    Par Immobilis dans le forum ASP.NET
    Réponses: 6
    Dernier message: 10/11/2005, 23h49
  5. Remplir un array
    Par PrinceMaster77 dans le forum ASP
    Réponses: 11
    Dernier message: 01/04/2005, 09h23

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