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

JavaScript Discussion :

Mettre une condition à une ligne de code selon une variable booléenne.


Sujet :

JavaScript

  1. #1
    Membre à l'essai
    Homme Profil pro
    Rédacteur technique
    Inscrit en
    Décembre 2021
    Messages
    271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Rédacteur technique

    Informations forums :
    Inscription : Décembre 2021
    Messages : 271
    Points : 21
    Points
    21
    Par défaut Mettre une condition à une ligne de code selon une variable booléenne.
    Bonjour,

    je cherche comment faire pour insérer une condition dans un code javascript

    Le code ci-dessous me sert à récupérer des variables et les insérer dans un tableau qui est exploité plus loin.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    // Nous initialisons une liste de marqueurs (tableau de positions)
     var positions = 
    {
      "id5": { "lat": lat5, "lon": lon5, "nomtete": [tete5], "etiquette": [nom5], "lieu": [lieu5], "horodate": [horodate5] },
      "id4": { "lat": lat4, "lon": lon4, "nomtete": [tete4], "etiquette": [nom4], "lieu": [lieu4], "horodate": [horodate4] },
      "id3": { "lat": lat3, "lon": lon3, "nomtete": [tete3], "etiquette": [nom3], "lieu": [lieu3], "horodate": [horodate3] },
      "id2": { "lat": lat2, "lon": lon2, "nomtete": [tete2], "etiquette": [nom2], "lieu": [lieu2], "horodate": [horodate2] },
      "id1": { "lat": lat1, "lon": lon1, "nomtete": [tete1], "etiquette": [nom1], "lieu": [lieu1], "horodate": [horodate1] },
    };
    Le tableau comporte au maximum 5 lignes, comme vous le voyez ci-dessus. Avec chacune 6 variables (longitude latitude, nom, etiquette, lieu et horodate)
    Ici je les ai déterminées en dur puisque je ne sais pas faire autrement.
    Dans certaines conditions (que je vais probablement gérer par une 7eme variable genre ok#) je veux que la ligne ne puisse pas exister.
    Genre si la variable ok3 est false, je ne veux pas construire la ligne "id3" dans ce tableau (et donc n'avoir un tableau que de 4 lignes : 1 2 4 et 5).

    Comment je pourrais coder ça ?

  2. #2
    Membre à l'essai
    Homme Profil pro
    Rédacteur technique
    Inscrit en
    Décembre 2021
    Messages
    271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Rédacteur technique

    Informations forums :
    Inscription : Décembre 2021
    Messages : 271
    Points : 21
    Points
    21
    Par défaut
    Est-ce que ça peut marcher si, par exemple, je code ça façon

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if (okN == true) {
       j'écris le code de la ligne N;
      } else {
        je laisse la ligne vide;
      }
    ?

    ce qui donnerait, une fois développé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    var positions = 
    {
      if (ok5 == true) {  "id5": { "lat": lat5, "lon": lon5, "nomtete": [tete5], "etiquette": [nom5], "lieu": [lieu5], "horodate": [horodate5] }, } else {}
      if (ok4 == true) {  "id4": { "lat": lat4, "lon": lon4, "nomtete": [tete4], "etiquette": [nom4], "lieu": [lieu4], "horodate": [horodate4] }, } else {}
      if (ok3 == true) {  "id3": { "lat": lat3, "lon": lon3, "nomtete": [tete3], "etiquette": [nom3], "lieu": [lieu3], "horodate": [horodate3] }, } else {}
      if (ok2 == true) {  "id2": { "lat": lat2, "lon": lon2, "nomtete": [tete2], "etiquette": [nom2], "lieu": [lieu2], "horodate": [horodate2] }, } else {}
      if (ok1 == true) {  "id1": { "lat": lat1, "lon": lon1, "nomtete": [tete1], "etiquette": [nom1], "lieu": [lieu1], "horodate": [horodate1] }, } else {}
    };
    Mmmh, ça me semble quand même bancal, mon truc. j'ai l'impression qu'il manque des ; mais je ne sais pas où les mettre.

  3. #3
    Expert éminent sénior

    Avatar de -Nikopol-
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2013
    Messages
    2 174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2013
    Messages : 2 174
    Points : 11 292
    Points
    11 292
    Billets dans le blog
    5
    Par défaut
    d'ou viennent les valeurs de la variable ? comment est construit l'objet positions ?

  4. #4
    Membre à l'essai
    Homme Profil pro
    Rédacteur technique
    Inscrit en
    Décembre 2021
    Messages
    271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Rédacteur technique

    Informations forums :
    Inscription : Décembre 2021
    Messages : 271
    Points : 21
    Points
    21
    Par défaut
    Citation Envoyé par -Nikopol- Voir le message
    d'ou viennent les valeurs de la variable ? comment est construit l'objet positions ?
    Ahah, terrible question. Enfin, non, c'est la réponse qui va être terrible, surtout…

    Donc, au départ on a des données encodées en xml (je ne vais pas alourdir en expliquant la collecte des données xml, ce qui n'aurait pas d'intérêt, il me semble) sous la forme suivante

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?xml version="1.0" encoding="UTF-8"?>
    <donnees>
    	<personne id="1">
    		<nom>Jérôme</nom>
    		<tete>Jerome</tete>
    		<lieu>sur la mezzanine devant un écran</lieu>
    		<latitude>48.15</latitude>
    		<longitude>1.23</longitude>
    		<horodate>14 Dec 2021, 19 : 51</horodate>
    	</personne>
    etc. jusqu'à id="5"


    Ce xml est d'abord lu dans par du code PHP pour en extraire les variables

    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
    <?php
     
          // le code simplexml_load_file convertit un fichier XML en objet
          $donnees = simplexml_load_file ( 'donnees.xml' ); 
     
          // Pour chaque <personne>, nous extrayons <nom>, <tete>, <lieu>, <horodate>, <latitude» et <longitude>
          // pour les injecter dans des variables PHP qui seront récupérées par le script ensuite
          foreach ($donnees -> personne as $personne)
            {
            if ($personne->latitude=='0.0' && $personne->longitude=='0.0')
              {} else {
              if ($personne['id'] == '5') 
                {
                $nom5 = $personne -> nom ;
                $tete5 = $personne -> tete ;
                $lieu5 = $personne -> lieu ;
                $horodate5 = $personne -> horodate ;
                $lat5 = $personne -> latitude ;
                $lon5 = $personne -> longitude ;
                }
     // etc pour les id 4 3 2 et 1
              }
            } 
        ?>

    Ici on voit que j'ai mis deux conditions if afin de ne pas récupérer les données des personnes dont les valeurs latitude et longitude sont égales à 0.0, car je ne veux pas les afficher sur la carte (je vais les traiter autrement).
    Après ce code PHP, on a donc des variables de type nomN, teteN, lieuN etc (N pour chaque id de 1 à 5, sauf ceux qui ont été exclus par les if)
    je n'ai pas du tout incorporé de variable booléenne okN pour séparer ceux qui passent le double if et ceux qui ne le passent pas pour le moment. Mais on peut facilement l'imaginer.

    Et plus loin, DANS ce même fichier PHP (je n'ai pas encore réussi à traiter ça dans un .js à part, ça fait l'objet d'une autre discussion), le script qui réintègre ces variables, il ressemble à ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <script>
    // récupération des variables PHP personne 1
          var nom1='<?PHP echo $nom1;?>';
          var tete1='<?PHP echo $tete1;?>';
          var lat1='<?PHP echo $lat1;?>';
          var lon1='<?PHP echo $lon1;?>';
          var horodate1='<?PHP echo $horodate1;?>';
          var lieu1='<?PHP echo $lieu1;?>';
    etc jusqu'à 5
    Déjà, ici il faut peut-être que je conditionne la récupération des données à un true/false via le okN pour éviter des msg d'erreur s'il essaye de récupérer des données inexistantes.

    Et donc après cette récupération de variable PHP en variable JS, il y a le code que j'ai donné plus haut.

    Et encore après du code qui va utiliser tout ça pour créer des marqueurs sur une carte OSM (là aussi, il ne semble pas utile que je mette le code ici, ça n'apporterait probablement rien sinon plus de confusion).

  5. #5
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 409
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 409
    Points : 15 778
    Points
    15 778
    Par défaut
    étant donné que vous faites déjà un traitement de ces données en php, vous pouvez peut-être faire ce filtre au moment endroit.
    d'où viennent ces informations "ok..." ?

  6. #6
    Membre à l'essai
    Homme Profil pro
    Rédacteur technique
    Inscrit en
    Décembre 2021
    Messages
    271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Rédacteur technique

    Informations forums :
    Inscription : Décembre 2021
    Messages : 271
    Points : 21
    Points
    21
    Par défaut
    Bonjour.

    Le problème est que, comme vous le voyez dans mon premier code javascript :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    // Nous initialisons une liste de marqueurs (tableau de positions)
     var positions = 
    {
      "id5": { "lat": lat5, "lon": lon5, "nomtete": [tete5], "etiquette": [nom5], "lieu": [lieu5], "horodate": [horodate5] },
      "id4": { "lat": lat4, "lon": lon4, "nomtete": [tete4], "etiquette": [nom4], "lieu": [lieu4], "horodate": [horodate4] },
      "id3": { "lat": lat3, "lon": lon3, "nomtete": [tete3], "etiquette": [nom3], "lieu": [lieu3], "horodate": [horodate3] },
      "id2": { "lat": lat2, "lon": lon2, "nomtete": [tete2], "etiquette": [nom2], "lieu": [lieu2], "horodate": [horodate2] },
      "id1": { "lat": lat1, "lon": lon1, "nomtete": [tete1], "etiquette": [nom1], "lieu": [lieu1], "horodate": [horodate1] },
    };
    Je détermine ici 5 lignes de données dans le tableau positions.
    Ces 5 lignes sont déterminées en dur; Donc même si je vide les données au préalable dans le PHP, ce tableau comportera toujours 5 lignes de données.
    Or, ce dont j'ai besoin c'est que les lignes dont les valeurs lat et lon sont égales à 0 ne soient pas générées.

    Exemples, (pour simplifier je ne montre que la valeur lat, pour le principe)

    1 ) cas normal, imaginons que les valeurs issues du PHP sont

    lat1 = 42
    lat2 = 18
    lat3 = 20
    lat4 = 15
    lat5 = 60

    le code JS va générer tableau positions JS avec les valeurs suivantes:

    id1 : lat = 42
    id2 : lat = 18
    id3 : lat = 20
    id4 : lat = 15
    id5 : lat = 60

    Et tout va bien, je vais générer les ligne id1 id2 id3 id4 et id5 (soit 5 lignes).


    2 ) Mais, si, par exemple, la valeur lat2 est == à 0,

    Donc on recevrait les valeurs PHP suivantes

    lat1 = 42
    lat2 = 0
    lat3 = 20
    lat4 = 15
    lat5 = 60

    Si je ne change rien, le code JS va générer tableau positions JS avec les valeurs suivantes:

    id1 : lat = 42
    id2 : lat = 0
    id3 : lat = 20
    id4 : lat = 15
    id5 : lat = 60

    Soit encore un tableau de 5 lignes
    Mais ça me pose problème (parce que ça va afficher, sur la carte, un pointeur qui est faux).

    Donc j'ai besoin que le tableau généré en JS devienne, dans ce cas

    id1 : lat = 42
    id3 : lat = 20
    id4 : lat = 15
    id5 : lat = 60

    càd que ce tableau ne contienne QUE les lignes id1 id3 id4 et id5, MAIS PAS id2, soit 4 lignes seulement.

    En résumé :
    J'ai besoin qu'une condition if puisse déterminer à chaque ligne si elle est générée ou pas dans le tableau positions
    Et c'est ça que je ne sais pas faire.
    Je ne sais pas comment je dois modifier mon code actuel pour que le tableau de données positions ne contienne que les lignes qui me conviennent (et que je peux discriminer par avance avec une variable okN générée par le PHP).

  7. #7
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 409
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 409
    Points : 15 778
    Points
    15 778
    Par défaut
    je comprend un peu mieux, je viens de voir dans votre code du 4e message que vous testez déjà le cas où les coordonnées sont à zéro.

    je pense que vous n'utilisez pas la structure de données la plus pratique c'est pour cela que ça complique votre code. je vous conseille de construire le tableau suivant en PHP
    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
    <?php
     
    $positions = [
    	[
    		"lat" => "4.58",
    		"lon" => "-12",
    		"nomtete" => "abc",
    	],
    	[
    		"lat" => "20",
    		"lon" => "20.5",
    		"nomtete" => "Lou",
    	],
    	// ... les autres points à la suite
    ];
     
    ?>

    avec ce tableau vous pourrez ensuite le passer directement à votre code javascript comme cela :

    Code JavaScript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <script>
     
    let positions = <?php echo json_encode($positions);?>;
     
    console.log(positions);
     
     
     
     
    </script>

  8. #8
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 446
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 446
    Points : 4 959
    Points
    4 959
    Par défaut
    Bonjour,

    Vous pouvez transformer l'objet SimpleXmlElement en DOMElement puis utiliser la méthode removeChild pour supprimer l'élément concerné comme suite :
    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
     
    <?php
        $donnees = simplexml_load_file ( 'donnees.xml' );
        foreach($donnees->children() as $personne){
            if(empty((int)$personne->latitude) && empty((int)$personne->longitude)){
                $dom=dom_import_simplexml($personne);
                $dom->parentNode->removeChild($dom);
            }
        }
    ?>
    <script>
    let positions=JSON.parse('<?=json_encode($donnees);?>');
    console.log('position :',positions);
    positions.personne
    .forEach((elem)=>{
        console.log('elem id:',elem['@attributes'].id,", elem :",elem);
    })
    </script>

    Ou bien ne rien toucher au PHP et gérer le tout en js :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    positions.forEach(p=>{
        if(parseInt(p.longitude)==0&&parseInt(p.latitude)==0) 
            console.log('id :',p['@attributes'].id,", oui longitude et latitude ==0");
        else
            console.log("id :",p["@attributes"].id," NON longitude et latitude sont différents de 0") 
    });

  9. #9
    Membre à l'essai
    Homme Profil pro
    Rédacteur technique
    Inscrit en
    Décembre 2021
    Messages
    271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Rédacteur technique

    Informations forums :
    Inscription : Décembre 2021
    Messages : 271
    Points : 21
    Points
    21
    Par défaut
    Citation Envoyé par mathieu Voir le message
    je pense que vous n'utilisez pas la structure de données la plus pratique c'est pour cela que ça complique votre code. je vous conseille de construire le tableau suivant en PHP
    avec ce tableau vous pourrez ensuite le passer directement à votre code javascript comme cela :
    Bonjour Mathieu.
    Merci, c'est un début de piste, déjà, de ne pas avoir à manipuler les données en JS que je connais encore moins bien que le PHP.

    Pour autant, je bloque toujours au même endroit, au final : comment ne créer la ligne dans le tableau QUE quand j'ai des données à y faire figurer.

    Ici j'ai essayé de faire comme ça (après pas mal d'essais et d'erreurs, je suis débutant…)

    Donc d'abord je mets à zéro 5 variables en PHP

    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
          // création des 5 variables position vides
     
          $positions1 = "" ;
          $positions2 = "" ;
          $positions3 = "" ;
          $positions4 = "" ;
          $positions5 = "" ;


    Puis je complète ces variables seulement quand les conditions longitude latitude sont remplies :

    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
    foreach ($donnees -> personne as $personne)
            {
            if ($personne->latitude=='0.0' && $personne->longitude=='0.0')
              {
                // on ne met rien dans le tableau positions
              } else {
     
                if ($personne['id'] == '5') 
                  {
                  $position5 = 
                      [
                        "lat" => "$personne->latitude",
                        "lon" => "$personne->longitude",
                        "nomtete" => "$personne->tete",
                        "etiquette" => "$personne->nom",
                        "horodate" => "$personne->horodate",
                        "lieu" => "$personne->lieu" ,
                      ]
                    ;
                  }
     
    // idem pour 4 3 2 1
     
              }
            }

    Et enfin je les rassemble dans le tableau positions
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
              $positions = 
                [
                    $position1
                  ,
                    $position2
                  ,
                    $position3
                  ,
                    $position4
                  ,
                    $position5
                  ,
                ];
    Que je rappelle ensuite en JS comme vous me l'avez conseillé.

    Mais quand une variable position est vide, ça crée quand même une ligne vide dans le tableau. Je suis revenu à mon point de départ.
    Car j'ai besoin que le tableau ne comporte que des lignes utilisables, pas des lignes vides (sinon ça plante le reste du programme).

    J'ai essayé de concaténer en mode $position = $position1.$position2 ou en mode
    $positions .= (le contenu à ajouter pour chaque ligne)
    Mais ça ne marche pas, je ne sais pas pourquoi.
    On dirait que la concaténation ne donne pas le résultat voulu.

  10. #10
    Membre à l'essai
    Homme Profil pro
    Rédacteur technique
    Inscrit en
    Décembre 2021
    Messages
    271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Rédacteur technique

    Informations forums :
    Inscription : Décembre 2021
    Messages : 271
    Points : 21
    Points
    21
    Par défaut
    Pour mon problème de concaténation, je m'explique un peu mieux.
    Prenons le code :
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
          $positions = [$position1,$position2,$position3,$position4,$position5,];

    Si je le remplace par :
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
          $positions = [$position1,$position2,$position3,];
          $positions .= [$position4,$position5,];

    Ça ne fonctionne plus.

    Peut-être que l'usage de .= n'est pas bon, mais je ne sais pas comment faire autrement.
    Or c'est probablement à ce niveau là que je devrais travailler pour avoir la maîtrise du nombre de lignes de mon tableau.

  11. #11
    Membre à l'essai
    Homme Profil pro
    Rédacteur technique
    Inscrit en
    Décembre 2021
    Messages
    271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Rédacteur technique

    Informations forums :
    Inscription : Décembre 2021
    Messages : 271
    Points : 21
    Points
    21
    Par défaut
    Pour illustrer encore un peu le problème, voici un exemple de ce que je sors en print_r($positions); si je mets des valeurs 0.0 pour longitude latitude de l'utilisateur 3 (donc 2 dans le tableau qui commence par 0)

    Array ( [0] => Array ( [lat] => 48 [lon] => 1 [nomtete] => Toto [etiquette] => Toto [horodate] => 14 Dec 2021, 19 : 51 [lieu] => sur la mezzanine devant un écran ) [1] => Array ( [lat] => 47 [lon] => 1 [nomtete] => Titi [etiquette] => Titi [horodate] => 14 Dec 2021, 19 : 52 [lieu] => dans le canapé, téléphone à la main ) [2] => [3] => Array ( [lat] => 44 [lon] => 3 [nomtete] => Tete [etiquette] => Tété [horodate] => 14 Dec 2021, 19 : 52 [lieu] => en train de fabriquer un sapin en lierre ) [4] => Array ( [lat] => 40 [lon] => 2 [nomtete] => Tutu [etiquette] => Tutu [horodate] => 14 Dec 2021, 16 : 53 [lieu] => en B5 salle 216 (je crois) ) )

    Comme vous voyez, j'ai en gras la ligne 2 du tableau qui est vide, puis 3 et 4 qui sont remplies. Et je voudrais avoir plutôt les données de 3 dans 2, celles de 4 dans 3 et pas de ligne 4. Je ne sais pas si c'est clair.

  12. #12
    Membre à l'essai
    Homme Profil pro
    Rédacteur technique
    Inscrit en
    Décembre 2021
    Messages
    271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Rédacteur technique

    Informations forums :
    Inscription : Décembre 2021
    Messages : 271
    Points : 21
    Points
    21
    Par défaut
    Citation Envoyé par Toufik83 Voir le message
    Bonjour,

    Vous pouvez transformer l'objet […]
    Bonjour Toufik83,
    votre solution est probablement prometteuse et je vous remercie de me la proposer, mais ce sont des codes bcp trop complexes pour moi. Je ne comprends pas ce qu'ils font ni, surtout, comment les manipuler pour les adapter chez moi.

  13. #13
    Inactif  
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2021
    Messages
    645
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juin 2021
    Messages : 645
    Points : 1 280
    Points
    1 280
    Par défaut
    Bonjour,

    mathieu t'a donné, à mon avis, la meilleure méthode.
    A TOI d'y inclure les conditions (PHP) pour ajouter, ou pas, la ligne de position.

    Pour obtenir :
    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
    <?php
     $positions = [
    	[
    		"lat" => "4.58",
    		"lon" => "-12",
    		"nomtete" => "abc",
    	],
    	[
    		"lat" => "20",
    		"lon" => "20.5",
    		"nomtete" => "Lou",
    	],
    	// ... les autres points à la suite
    ];
     
    ?>
    Le code sera :
    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
    <?php
    $positions = []; // array
     
    // 1- récupération des lignes
    // ....
     
    foreach ($donnees->personne as $personne)
    {
       if ($personne->latitude=='0.0' && $personne->longitude=='0.0')
       {
          // rien !   
       } else {
     
          $positions[] = [
    		"lat" =>$personne->latitude,
    		"lon" => $personne->longitude,
    		"nomtete" => $personne->nomtete,
    		// ...
    	];
       }
    }

  14. #14
    Inactif  
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2021
    Messages
    645
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juin 2021
    Messages : 645
    Points : 1 280
    Points
    1 280
    Par défaut
    Si tu veux absolument des id1, id2,... :
    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
    <?php
    $positions = []; // array
    $id = 0;
     
    // 1- récupération des lignes
    // ....
     
    foreach ($donnees->personne as $personne)
    {
       if ($personne->latitude=='0.0' && $personne->longitude=='0.0') // conditions à vérifier !
       {
          // rien !   
       } else {
     
          $id++; // on incrémente
     
          $positions['id'.$id] = [
    		"lat" =>$personne->latitude,
    		"lon" => $personne->longitude,
    		"nomtete" => $personne->nomtete,
    		// ...
    	];
       }
    }

  15. #15
    Membre à l'essai
    Homme Profil pro
    Rédacteur technique
    Inscrit en
    Décembre 2021
    Messages
    271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Rédacteur technique

    Informations forums :
    Inscription : Décembre 2021
    Messages : 271
    Points : 21
    Points
    21
    Par défaut
    Ouiiiii !

    merci jreaux62, ce qui me manquait, c'était la subtilité de code
    $positions = []; // arraysuivie plus loin de
    $positions[] = [// choses à ajouter en tant que sous-tableau dans le tableau];
    Sans cette subtilité je passais complètement à côté !

    Bon, j'ai réussi à tester ça sur un petit fichier, il faut que je le déploie maintenant sur mon code, mais je pense que là tu m'as donné la dernière petite clef qu'il me manquait. Je ne connaissais pas ce code avec les parenthèse carrées juste après un nom de variable.

    Allez, courage.

  16. #16
    Membre à l'essai
    Homme Profil pro
    Rédacteur technique
    Inscrit en
    Décembre 2021
    Messages
    271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Rédacteur technique

    Informations forums :
    Inscription : Décembre 2021
    Messages : 271
    Points : 21
    Points
    21
    Par défaut
    Voilà voilà, ça marche.

    Avec le code PHP (super sobre pour le coup, en plus)
    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
    <?php
      // le code simplexml_load_file convertit un fichier XML en objet
      $donnees = simplexml_load_file ( 'donnees.xml' ); 
     
      $jreaux62 = []; // création d'une variable tableau
     
      // Pour chaque <personne>, dont latitude et longitude sont différentes de 0.0
      // nous extrayons <nom>, <tete>, <lieu>, <horodate>, <latitude» et <longitude>
      // pour les injecter dans un tableau de variables PHP nommé jreaux62
      // qui sera récupéré par le script ensuite
     
      foreach ($donnees -> personne as $personne)
        {
        if ($personne->latitude=='0.0' && $personne->longitude=='0.0')
          { /* on ne met rien dans le tableau jreaux62 si lat et lon sont nuls*/} else {
            $jreaux62[] = 
              [
                "lat" => "$personne->latitude",
                "lon" => "$personne->longitude",
                "nomtete" => "$personne->tete",
                "etiquette" => "$personne->nom",
                "horodate" => "$personne->horodate",
                "lieu" => "$personne->lieu" ,
              ];
          }
        } 
    ?>

    Et plus loin le code JS qui récupère le tableau construit en PHP

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <script>let pMathieu = <?php echo json_encode($jreaux62);?>;
    console.log(pMathieu);
    // etc.
    J'espère que vous ne m'en voudrez pas d'avoir mis vos noms en guise de variable, ça me rappellera comment j'ai pu y arriver quand je rouvrirai ce code plus tard.

  17. #17
    Inactif  
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2021
    Messages
    645
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juin 2021
    Messages : 645
    Points : 1 280
    Points
    1 280
    Par défaut
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
      $jreaux62 = []; // création d'une variable tableau


    N.B. Les guillemets ne sont pas utiles ici :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
            $jreaux62[] = 
              [
                "lat" => $personne->latitude,
                "lon" => $personne->longitude,
                "nomtete" => $personne->tete,
                "etiquette" => $personne->nom,
                "horodate" => $personne->horodate,
                "lieu" => $personne->lieu,
              ];

  18. #18
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 409
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 409
    Points : 15 778
    Points
    15 778
    Par défaut
    vous y seriez aussi arrivé avec votre code du début mais là le code est plus lisible. donc vous arriverez plus facilement à le comprendre si vous devez le modifier dans quelques mois.

    pour plus de détails sur l'utilisation des tableaux en php, regardez là :
    https://g-rossolini.developpez.com/t...=page-3#LIII-J
    https://sylvie-vauthier.developpez.c...e=tableaux#LIV

  19. #19
    Membre à l'essai
    Homme Profil pro
    Rédacteur technique
    Inscrit en
    Décembre 2021
    Messages
    271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Rédacteur technique

    Informations forums :
    Inscription : Décembre 2021
    Messages : 271
    Points : 21
    Points
    21
    Par défaut
    Citation Envoyé par jreaux62 Voir le message
    N.B. Les guillemets ne sont pas utiles ici :
    Au début je n'avais pas mis de quotes, justement.
    Car pour moi, on traite une variable, enfin en tout cas du code, et le mise entre quote c'est pour du texte.

    Mais à un moment, parmi toutes les variantes de code que j'ai faites dans mes divers essais, ça ne passait que si je mettais des quotes (je ne me souviens plus à quel étape de variante du code, désolé). Et donc ensuite je les ai laissées puisque ça ne gênait pas le processus.

    Citation Envoyé par mathieu Voir le message
    vous y seriez aussi arrivé avec votre code du début mais là le code est plus lisible. donc vous arriverez plus facilement à le comprendre si vous devez le modifier dans quelques mois.
    Le code est CARRÉMENT plus lisible, même !
    Mon code faisait des kilomètres… Vous m'avez vraiment bien aidé à le rendre digeste.

    Et je ne suis pas sûr que j'aurai pu y arriver avec la direction que j'avais prise car je constituais les lignes (la 2eme dimension) du tableau avec un code en dur qui ne pouvait pas prendre de if et donc le nbre de lignes ne pouvait pas s'adapter.

    La notion de [] qui permet de remplir la tableau au fur et à mesure m'a bien aidé.

    Enfin, je suis content du résultat de ces efforts, en tout cas.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 11/10/2019, 20h00
  2. mettre une variable ds document.getElementById('')?
    Par zorba49 dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 27/06/2006, 16h30
  3. [Excel]Mettre une variable dans une fonction
    Par soad029 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 14/04/2006, 12h00
  4. Réponses: 7
    Dernier message: 29/03/2006, 11h50
  5. Réponses: 17
    Dernier message: 31/12/2005, 13h23

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