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 :

Parser string vers un tableau HTML


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2018
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2018
    Messages : 45
    Points : 21
    Points
    21
    Par défaut Parser string vers un tableau HTML
    Bonjour,

    Soit un string:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dataList[2180] = {id:"xxxxxx", room_id:"xxxxxx", call_sign:"F1TRN", city:"Sainte Cecile", state:"Centre", country:"France"};
    En PHP je souhaite récupérer les valeurs de champs et de les placer dans un tableau à entête (id, room_id ...).

    Comment faire ?

    Merci de votre aide.

  2. #2
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 098
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 098
    Points : 8 207
    Points
    8 207
    Billets dans le blog
    17
    Par défaut
    Ce que tu montres n'existe pas en PHP.

    Il y a une espèce d'objet qui ressemble à du JSON, mais qui n'en est pas.

    Quelles données as-tu exactement ?
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  3. #3
    Membre à l'essai
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2018
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2018
    Messages : 45
    Points : 21
    Points
    21
    Par défaut
    Les données sont celles que j'expose, elles proviennent d'un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     $source_code = file('https://site.php');
    Ensuite je fait un foreach de $source_code et recherche sur chaque ligne la présence d'un mot (ici mon indicatif radio F1TRN).

    ce qui me donne donc:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dataList[2180] = {id:"34931", room_id:"44931", call_sign:"F1TRN", city:"Sainte Cecile", state:"Centre", country:"France"};
    J'ai répondu à la question
    Quelles données as-tu exactement ?
    Mon pb est donc bien celui-ci un JSON sans en être, je cherche donc à parser afin de récupérer les data et les mettre sous un tableau HTML.

  4. #4
    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,
    le tableau que tu souhaites obtenir ne serait-il pas plutôt un tableau PHP avec ce contenu :
    array=[
    "id" =>"34931;
    "room_id" =>"44931";
    "call_sign"=>"F1TRN;
    "city" => "Sainte Cecile";
    "state" => "Centre";
    "country" => "France"
    ]
    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

  5. #5
    Membre à l'essai
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2018
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2018
    Messages : 45
    Points : 21
    Points
    21
    Par défaut
    Citation Envoyé par laurentSc Voir le message
    Bonjour,
    le tableau que tu souhaites obtenir ne serait-il pas plutôt un tableau PHP avec ce contenu :
    Oui mais comment l'obtenir ?

  6. #6
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 098
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 098
    Points : 8 207
    Points
    8 207
    Billets dans le blog
    17
    Par défaut
    Je ne sais toujours pas quelles données tu récupères et dans quel format.

    Encore une fois ceci ne PEUT PAS exister en PHP :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dataList[2180] = {id:"34931", room_id:"44931", call_sign:"F1TRN", city:"Sainte Cecile", state:"Centre", country:"France"};
    Est-ce un littéral ? Ou du pseudo-code ?

    Donne-nous le retour BRUT du site.
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  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
    Bonsoir,
    j'ai très peu de dispo jusqu'à dimanche soir. Cela étant, F1TRN, peux-tu donner tes données en PHP (contenues dans une variable PHP) ? Le peu que je connaisse me laisse penser qu'une regex fera l'affaire...
    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 à l'essai
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2018
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2018
    Messages : 45
    Points : 21
    Points
    21
    Par défaut
    Voici donc le code qui me permets de récupérer ces lignes:

    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
    <html>
      <title>WIRES-X ID</title>
      <body>
      <p>Recherche des informations WIRES-X depuis un indicatif (Europe uniquement).</p>
      <form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
        Indicatif: <input type="text" name="indicatif">
        <input type="submit">
      </form>
      <?php
      if ($_SERVER["REQUEST_METHOD"] == "POST") {
        $call = $_POST['indicatif'];
        if (empty($call)) {
          echo "Merci de renseigner le champ Indicatif !";
        } else {
          echo "Resultat de la recherche pour ".$call." :";
          echo "<br><br>";
          $source_code = file('https://www.yaesu.com/jp/en/wires-x/id/id_eu.php');
          foreach ($source_code as $line_number => $last_line) {
            $data = nl2br(htmlspecialchars($last_line) . "\n");
            if(preg_match("/{$call}/i", $data)) {
                    echo $data;
            }
          }
        }
      }
      ?>
      </body>
    </html>

  9. #9
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 098
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 098
    Points : 8 207
    Points
    8 207
    Billets dans le blog
    17
    Par défaut
    OK, il s'agit donc d'un littéral d'une portion de code JavaScript d'une page web.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <script type="text/javascript">
    var dataList = new Array();
    dataList[0] = {id:"17002", room_id:"27002", call_sign:"IR0UCA", city:"Scandriglia(RI)", state:"Lazio", country:"Italy"};
    dataList[1] = {id:"17003", room_id:"27003", call_sign:"IZ2EVE", city:"Cassolnovo", state:"Lombardy", country:"Italy"};
    dataList[2] = {id:"17004", room_id:"27004", call_sign:"IU2CSY", city:"Azzio", state:"Lombardy", country:"Italy"};
    dataList[3] = {id:"17006", room_id:"27006", call_sign:"I3ZNI", city:"Cassola", state:"Veneto", country:"Italy"};
    ...
    Le plus simple est sûrement d'utiliser une regexp pour constituer un tableau associatif PHP que tu seras libre de manipuler comme tu le souhaites avec array_map() puis array_filter().

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    <?php
     
    $url = 'https://www.yaesu.com/jp/en/wires-x/id/id_eu.php';
     
    $contents = file_get_contents($url);
     
    preg_match_all(
        <<<REGEXP
        /
            dataList\[\d+]\ =\ {
                id:"(?P<id>\d+)",
                \ room_id:"(?P<room_id>\d+)",
                \ call_sign:"(?P<call_sign>\w+)",
                \ city:"(?P<city>[^"]+)",
                \ state:"(?P<state>[^"]+)",
                \ country:"(?P<country>[^"]+)"
            };
        /x
        REGEXP,
        $contents,
        $matches,
        PREG_SET_ORDER
    );
     
    // Nettoyage et création du tableau associatif
    $data = array_map(fn ($m) => [
        'id' => $m['id'],
        'room_id' => $m['room_id'],
        'call_sign' => $m['call_sign'],
        'city' => $m['city'],
        'state' => $m['state'],
        'country' => $m['country'],
    ], $matches);
     
    // Filtrage
    $keep = ['F1TRN', 'F5SHD']; // Tableau de call_signs à conserver
    $filter = fn ($e) => in_array($e['call_sign'], $keep); // Closure de filtrage
    $data = array_filter($data, $filter); // Filtrage
     
    print_r($data); // Résultat final

    Donne :

    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
    Array (
        [2091] => Array (
            [id] => 34931
            [room_id] => 44931
            [call_sign] => F1TRN
            [city] => Sainte Cecile
            [state] => Centre
            [country] => France
        )
        [2104] => Array (
            [id] => 34950
            [room_id] => 44950
            [call_sign] => F5SHD
            [city] => LOURDES
            [state] => Midi-Pyrenees
            [country] => France
        )
    )
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  10. #10
    Membre à l'essai
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2018
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2018
    Messages : 45
    Points : 21
    Points
    21
    Par défaut
    Citation Envoyé par Séb. Voir le message
    Le plus simple est sûrement d'utiliser une regexp pour constituer un tableau associatif PHP que tu seras libre de manipuler comme tu le souhaites avec array_map() puis array_filter().
    Merci beaucoup Séb. Je vais fortement regarder l'utilisation de REGEXP que je ne connais pas. Ne me reste donc plus qu'à constituer mon tableau.

  11. #11
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 098
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 098
    Points : 8 207
    Points
    8 207
    Billets dans le blog
    17
    Par défaut
    Dans mon script REGEXP est juste le délimiteur de la chaîne de caractères, syntaxe Heredoc ( https://www.php.net/manual/fr/langua...syntax.heredoc )
    On aurait aussi bien pu délimiter la chaîne de l'expression rationnelle avec BUFFER ou STR
    Ce qui compte est preg_match_all() et le traitement effectué ensuite.
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  12. #12
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Voilà comment je ferais les choses:
    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
    libxml_use_internal_errors(true);
     
    $dom = new DOMDocument;
    $dom->loadHTMLFile('https://www.yaesu.com/jp/en/wires-x/id/id_eu.php');
     
    $scriptNodeList = $dom->getElementsByTagName('script');
    $scriptContent = $scriptNodeList->item(3)->textContent;
     
    $lines = array_filter(
        explode("\n", $scriptContent),
        fn($line) => str_contains($line, '"F1TRN"')
    );
     
    $results = []; 
    foreach ($lines as $line) {
        $results[] = json_decode(
            preg_replace('~^[][\w=\s]+|(\w+)(?=:("))|[\s;]+$~', '$2$1$2', $line),
            true
        );
    }
     
    print_r($results);
    Je pars du principe qu'il n'est pas nécessaire de tester la structure de la ligne et que la seule présence de la chaîne "F1TRN" suffit à la valider.*
    Le remplacement effectué par preg_replace consiste simplement à ajouter des doubles quotes autour des clefs et à éliminer la variable et son affectation pour ne garder que l'objet littéral javascript.

    C'est en PHP 8, mais ça peut être transformer en PHP 7 à peu de frais (en utilisant strpos à la place de str_contains, voire en remplaçant l'arrow function fn($line) => par une fonction anonyme function($line) { ... return ... })


    * Il est clair que dans le cas contraire une analyse bien plus poussée de la syntaxe de l'objet Javascript serait nécessaire.


    La pattern:
    • 1ère branche: ^[][\w=\s]+ se charge d'enlever la variable, le signe = et les espaces au début de la ligne. Si cette branche réussit les groupes de capture 1 et 2 sont vides (pas définis du tout en fait) et le remplacement sera alors une chaîne vide.
    • 2e branche: (\w+)(?=:(")) capture la clef, une sous-chaîne de word characters ( a-z A-Z 0-9 _ ), qui est suivit par le caractère : (deux points) et un double quote ". La clef et le double quote sont capturés dans les groupes 1 et 2 utilisés dans le motif de remplacement.
    • 3e branche: [\s;]+$ permet d'enlever le point virgule et les éventuels caractères blancs en fin de ligne.



    La partie DOMDocument pour extraire le contenu de la balise script est peut-être un peu too much vue la tête de ton document, tu peux aussi voir ce que cela donne en passant directement le résultat de ta commande file(...) à la place de explode("\n", $scriptContent).
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  13. #13
    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
    Salut F1TRN ,

    2 vrais experts t'ont répondu (posts #9 et #12) (Moi, c'est une supercherie de m'appeler "expert confirmé"). Et tous les 2 te proposent une solution basée sur les expressions singulières (souvent appelées regex ou REGEXP ). C'est ce que j'avais intuité hier soir (post #7). Bonne continuation.
    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

  14. #14
    Membre à l'essai
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2018
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2018
    Messages : 45
    Points : 21
    Points
    21
    Par défaut
    Citation Envoyé par F1TRN Voir le message
    Merci beaucoup Séb. Je vais fortement regarder l'utilisation de REGEXP que je ne connais pas. Ne me reste donc plus qu'à constituer mon tableau.
    Oui ça fonctionne, mais pas à 100% car certains call_sign peuvent comporter un suffixe (exemple: F5CES/P) et donc dans ce cas là la ligne comportant le suffixe ne ressort pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Resultat de la recherche pour F5CES :
     
    dataList[597] = {id:"17919", room_id:"27919", call_sign:"F5CES", city:"Quantilly", state:"Centre", country:"France"};
     
    dataList[2053] = {id:"34754", room_id:"44754", call_sign:"F5CES/P", city:"QUANTILLY", state:"Centre", country:"France"};
     
    dataList[2982] = {id:"37996", room_id:"47996", call_sign:"F5CES", city:"QUANTILLY", state:"Centre", country:"France"};

  15. #15
    Membre à l'essai
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2018
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2018
    Messages : 45
    Points : 21
    Points
    21
    Par défaut
    CosmoKnacki,

    Merci de ton aide, mais je ne parviens pas à mes fins. J'essaye donc toujours de transformer ces lignes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    dataList[597] = {id:"17919", room_id:"27919", call_sign:"F5CES", city:"Quantilly", state:"Centre", country:"France"};
     
    dataList[2053] = {id:"34754", room_id:"44754", call_sign:"F5CES/P", city:"QUANTILLY", state:"Centre", country:"France"};
     
    dataList[2982] = {id:"37996", room_id:"47996", call_sign:"F5CES", city:"QUANTILLY", state:"Centre", country:"France"};
    en un objet que je pourrait manipuler comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    echo $data['room_id'];
    echo $data['call_sign'];
    Désolé, mais mes connaissances de codage ne me permettent pas de réaliser ce besoin d’où mon appel à l'aide.

  16. #16
    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
    Ma maîtrise est à des années-lumière de celle de Séb. ou de Cosmo, par contre, j'ai trouvé pour compléter le script de Cosmo et obtenir ce que tu souhaites :

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    <?php
     
    libxml_use_internal_errors(true);
     
    $dom = new DOMDocument;
    $dom->loadHTMLFile('https://www.yaesu.com/jp/en/wires-x/id/id_eu.php');
     
    $scriptNodeList = $dom->getElementsByTagName('script');
    $scriptContent = $scriptNodeList->item(3)->textContent;
     
    $lines = array_filter(
        explode("\n", $scriptContent),
        fn($line) => str_contains($line, '"F1TRN"')
    );
     
    $results = [];
    foreach ($lines as $line) {
        $results[] = json_decode(
            preg_replace('~^[][\w=\s]+|(\w+)(?=:("))|[\s;]+$~', '$2$1$2', $line),
            true
        );
    }
     
    $data = [];
    foreach($results[0] as $key => $one_res) {
        $data[$key] = $one_res;
    }
    echo "room_id: ".$data['room_id']."<br/>";
    echo "call_sign: ".$data['call_sign'];
    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

  17. #17
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 098
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 098
    Points : 8 207
    Points
    8 207
    Billets dans le blog
    17
    Par défaut
    Citation Envoyé par F1TRN Voir le message
    Oui ça fonctionne, mais pas à 100% car certains call_sign peuvent comporter un suffixe (exemple: F5CES/P) et donc dans ce cas là la ligne comportant le suffixe ne ressort pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Resultat de la recherche pour F5CES :
    dataList[597] = {id:"17919", room_id:"27919", call_sign:"F5CES", city:"Quantilly", state:"Centre", country:"France"};
    dataList[2053] = {id:"34754", room_id:"44754", call_sign:"F5CES/P", city:"QUANTILLY", state:"Centre", country:"France"};
    dataList[2982] = {id:"37996", room_id:"47996", call_sign:"F5CES", city:"QUANTILLY", state:"Centre", country:"France"};
    Sur le call_sign avec \w tu matches seulement les caractères alphanumériques et _

    Il faut donc adapter la regexp pour accepter le / (et peut-être d'autres caractères) en passant de call_sign:"(?P<call_sign>\w+)" à call_sign:"(?P<call_sign>[\w\/]+)" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
        <<<REGEXP
        /
            dataList\[\d+]\ =\ {
                id:"(?P<id>\d+)",
                \ room_id:"(?P<room_id>\d+)",
                \ call_sign:"(?P<call_sign>[\w\/]+)",
                \ city:"(?P<city>[^"]+)",
                \ state:"(?P<state>[^"]+)",
                \ country:"(?P<country>[^"]+)"
            };
        /x
    Et bien sûr adapter $filter en conséquence.
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  18. #18
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Citation Envoyé par laurentSc Voir le message
    j'ai trouvé pour compléter le script de Cosmo et obtenir ce que tu souhaites :
    Alors oui $results est un tableau de tableaux ou chaque item (de 0 à n, suivant le nombre de lignes retenues) est un résultat. Il suffit de parcourir ce tableau:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    foreach($results as $data) {
        echo $data['room_id'], '<br>',
             $data['call_dign'], '<br>';
    }

    ou bien de choisir un item particulier:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $data = $results[0];
    echo $data['room_id'], '<br>',
         $data['call_dign'], '<br>';
    Mais ça c'est de la connaissance de base des tableaux qu'il faut absolument acquérir, de même que l'utilisation de var_dump et print_r pour voir à quoi ressemble le contenu d'une variable et sa structure.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  19. #19
    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 CosmoKnacki Voir le message
    de même que l'utilisation de var_dump et print_r pour voir à quoi ressemble le contenu d'une variable et sa structure.
    Pour le var_dump, je m'étais fait une méthode pratique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     static public function debug($location, $var)
        {
            //exemple d'appel : UtilFct::debug("Record.php 162 data deb de analyze_ticket ",self::$data);
            echo "<br/>".(is_string($location))?$location:'';//la variable $location sert à indiquer le nom
            // du fichier et le numéro de la ligne où on a appelé la fonction car quand on en a plus besoin, on sait plus où
            // on l'a placé !
            echo "<br/><pre>";
            var_dump($var);
            echo "</pre><br/>";
        }
    Par contre, je préférais utiliser xdebug...sauf que j'arrive plus à le remettre, ayant changé récemment de configuration.
    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

  20. #20
    Membre à l'essai
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2018
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2018
    Messages : 45
    Points : 21
    Points
    21
    Par défaut
    Citation Envoyé par laurentSc Voir le message
    Ma maîtrise est à des années-lumière de celle de Séb. ou de Cosmo, par contre, j'ai trouvé pour compléter le script de Cosmo et obtenir ce que tu souhaites :

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    <?php
     
    libxml_use_internal_errors(true);
     
    $dom = new DOMDocument;
    $dom->loadHTMLFile('https://www.yaesu.com/jp/en/wires-x/id/id_eu.php');
     
    $scriptNodeList = $dom->getElementsByTagName('script');
    $scriptContent = $scriptNodeList->item(3)->textContent;
     
    $lines = array_filter(
        explode("\n", $scriptContent),
        fn($line) => str_contains($line, '"F1TRN"')
    );
     
    $results = [];
    foreach ($lines as $line) {
        $results[] = json_decode(
            preg_replace('~^[][\w=\s]+|(\w+)(?=:("))|[\s;]+$~', '$2$1$2', $line),
            true
        );
    }
     
    $data = [];
    foreach($results[0] as $key => $one_res) {
        $data[$key] = $one_res;
    }
    echo "room_id: ".$data['room_id']."<br/>";
    echo "call_sign: ".$data['call_sign'];
    Oui merci mais lors de l'utilisation de suffixe (F5CES/P), cette solution ne fonctionne pas.

Discussions similaires

  1. sscanf d'un string vers un tableau
    Par ____22 dans le forum C
    Réponses: 7
    Dernier message: 31/08/2009, 15h37
  2. [Débutant] XSL vers tableau HTML
    Par Sam 069 dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 09/04/2007, 11h22
  3. [RegEx] Parser tableau html
    Par php_de_travers dans le forum Langage
    Réponses: 5
    Dernier message: 29/11/2006, 07h50
  4. [XSLT]XML vers tableau html
    Par lcdDEV dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 27/10/2006, 16h55
  5. tableau HTML vers CSV
    Par obelix dans le forum Langage
    Réponses: 6
    Dernier message: 09/11/2005, 23h51

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