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 :

Définir des constantes dans une boucle foreach


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2012
    Messages
    284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2012
    Messages : 284
    Points : 132
    Points
    132
    Par défaut Définir des constantes dans une boucle foreach
    Bonjour,

    Problème simple, j'ai une boucle Foreach :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <?php
     
    	foreach($champs_array as $champs)
    	{
    		if (!empty($champs[8]))
    		{	
    			echo $champs[8]. "<br/>";
    			echo $champs[9]. "<br/>";
    		}
    	}
     
    ?>
    Mes champs 8 et 9 seront toujours les mêmes.

    $champs[8] : Nom du serveur
    $champs[9] : @ ip du serveur

    Est ce qu'il est possible de donner un nom de variable/constante à ces champs pour que ce soit plus facile à gerer ?

    J'ai essayé ca, mais ca ne fonctionne pas :

    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
     
    <?php
     
    define($server_name, $champs[8]);
    ou
    $server_name = $champs[8];
     
     
     
    	foreach($champs_array as $champs)
    	{
    		if (!empty($server_name))
    		{	
    			echo $server_name. "<br/>";
    			echo $server_name. "<br/>";
    		}
    	}
     
    ?>
    Merci d'avance.

  2. #2
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    tu devrais relire la doc de define
    Fais plutôt comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    define('SERVER_NAME', $champs_array[0][8]); // on prend la valeur de la colonne index 8 de l'enregistrement index 0

  3. #3
    Membre habitué
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2012
    Messages
    284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2012
    Messages : 284
    Points : 132
    Points
    132
    Par défaut
    Merci pour ta réponse.

    Justement je n'ai pas trouvé dans la doc ...

    Une fois définie comment l'appeler dans la boucle

    Désolé je suis un noob ...

    Merci.

    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
     
     
    <?php
     
    define('SERVER_NAME', $champs_array[0][8]);
     
    	foreach($champs_array as $champs)
    	{
    		if (!empty(SERVER_NAME))
                    //if (!empty($SERVER_NAME))
    		{	
    			echo $champs[8]. "<br/>";
    			echo $champs[9]. "<br/>";
    		}
    	}
     
    ?>

  4. #4
    Membre habitué
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2012
    Messages
    284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2012
    Messages : 284
    Points : 132
    Points
    132
    Par défaut
    je ne vois absolument pas comment faire désolé ...

    Votre aide est la bienvenue, merci.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    define('SERVER_NAME', $champs_array[0][8]);
     
    foreach($champs_array as $champs)
    {
    		//echo ${SERVER_NAME};
    		//echo constant(SERVER_NAME);
    		echo var_dump(SERVER_NAME);
    }

  5. #5
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 49
    Points : 95
    Points
    95
    Par défaut
    Yop,

    Tout est dans la doc... http://php.net/manual/fr/function.define.php (et rawsrc te l'a déjà indiqué...)

    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
    define('SERVER_NAME', $champs_array[0][8]);
     
    foreach($champs_array as $champs)
    {
    		echo SERVER_NAME;
    }
     
    //Autre exemple avec le 3eme paramètre de define (case_insensitive) :
     
    define('SERVER_NAME', $champs_array[0][8], true);
     
    foreach($champs_array as $champs)
    {
    		echo SERVER_NAME;
    		echo Server_name;
    		echo SeRvEr_NaMe;
    		echo server_NAME;
    }

  6. #6
    Membre habitué
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2012
    Messages
    284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2012
    Messages : 284
    Points : 132
    Points
    132
    Par défaut
    Bonjour et merci,

    Mais ca n'affiche rien chez moi

    Le code complet :

    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
     
    <?php
     
     
    // FONCTION : lecture du fichier et création d'un array multi-dimension
    function ReadExtract($Filename)
    {
    	$champs_array = array();
    	$lines_array = file($Filename); // chemin fichier
    	// on supprime la 1ère ligne (celle contenant les titres)
    	unset($lines_array[0]);
    	// on sépare ensuite les éléments de chaque ligne
    	foreach($lines_array as $line){
    		//on enlève les " et espaces (surtout à la fin de la ligne)
    		$line = trim(str_replace('"', '', $line));
    		//on coupe a chaque ;
    		$champs_array[] = explode(";", $line);
    	}
    	return $champs_array;
    }
     
    $champs_array = ReadExtract($AssetExtractFilename);
    define('SERVER_NAME', $champs_array[0][8]);
     
    foreach($champs_array as $champs)
    {
    		echo SERVER_NAME;
    		echo Server_name;
    		echo SeRvEr_NaMe;
    		echo server_NAME;
    		echo var_dump(SERVER_NAME);
    }
     
    ?>

  7. #7
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 49
    Points : 95
    Points
    95
    Par défaut
    Peux-tu faire un var_dump($champs_array); juste avant le define et poster le résultat ?

    Merci

  8. #8
    Membre habitué
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2012
    Messages
    284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2012
    Messages : 284
    Points : 132
    Points
    132
    Par défaut
    Merci, voila ce que ça 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
    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
    46
    47
     
    array(9677) {
      [0]=>
      array(9) {
        [0]=>
        string(10) "1461673173"
        [1]=>
        string(9) "UCS922922"
        [2]=>
        string(10) "CZ314402J6"
        [3]=>
        string(0) ""
        [4]=>
        string(2) "HP"
        [5]=>
        string(15) "Blade BL620c G7"
        [6]=>
        string(1) "0"
        [7]=>
        string(0) ""
        [8]=>
        string(10) "MONSERVER1"
     
      }
      [1]=>
      array(9) {
        [0]=>
        string(8) "14364736"
        [1]=>
        string(9) "UCS393771"
        [2]=>
        string(7) "557480C"
        [3]=>
        string(6) "101329"
        [4]=>
        string(3) "IBM"
        [5]=>
        string(7) "IBM X36"
        [6]=>
        string(1) "0"
        [7]=>
        string(0) ""
        [8]=>
        string(10) "MONSERVER2"
      }
      ...
      ...

  9. #9
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        [8]=>
        string(10) "MONSERVER1"
    ...
        [8]=>
        string(10) "MONSERVER2"
    ...
    Tu veux définir une CONSTANTE alors que la valeur change ??

  10. #10
    Membre habitué
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2012
    Messages
    284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2012
    Messages : 284
    Points : 132
    Points
    132
    Par défaut
    Pour le string(0) c'est juste que j'ai coupé des champs yen a 29 au total j'ai juste mis les 8.

    J'ai modifié entre temps ..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
        [8]=>
        string(10) "MONSERVER1"
    ...
        [8]=>
        string(10) "MONSERVER2"
    ...
    Oui le nom change c'est normal je parcours un fichier.

    C'est juste que à chaque fois le champs 8 sera le nom de mon serveur.

    Et pour m'y retrouver dans mon code, au lieu d'appeler $champs[8] à chaque fois je voudrais mettre en constante champs8 : = server_name

    Comme ça dans mon code je pourrais appeler :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    echo server_name
    echo server_ip
    ...
    ce qui est plus explicite que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    echo $champs[8]
    echo $champs[7]
    donc je ne sais pas si c'est possible ....

    Merci encore pour ton aide.

  11. #11
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 49
    Points : 95
    Points
    95
    Par défaut
    Non, dans ce cas, ce que tu doit faire, c'est dans ton foreach :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    foreach($champs_array as $champs)
    {
    		$serveur = $champs[8];
    		echo $serveur;
    //De cette façon, $serveur sera celui de la ligne actuellement parcouru
    //Et tu peux réutiliser $serveur dans toute la fin du foreach
    }

    Sinon, je n'ai pas bien comprit ton problème

  12. #12
    Invité
    Invité(e)
    Par défaut
    Il fait être CLAIR.

    Une CONSTANTE est définie une fois pour toute. Elle n'est pas modifiable en cours de route.

    • Soit tu veux MODIFIER TOUS LES CHAMPS [8] pour les remplacer par une UNIQUE valeur
    • Soit TU NE PEUX PAS redéfinir à chaque fois la même CONSTANTE.

    Explique-moi, comme si j'avais 4 ans.

  13. #13
    Invité
    Invité(e)
    Par défaut
    Houlà, je pense avoir compris :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    foreach($champs_array as $champs)
    {
    		$server_name = $champs[8];
    		$server_ip = $champs[9];
    		// Ensuite, on peut utiliser $server_name et $server_ip dans la suite du foreach, 
    		// MAIS PAS à l'extérieur du foreach.
    		// .....
    }

  14. #14
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 49
    Points : 95
    Points
    95
    Par défaut
    Copieur jérome !
    =)

  15. #15
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Couci Voir le message
    Copieur jérome !
    Couci-couça !

    Pas eu le temps de poster la 2ème partie !

    Autre méthode :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    foreach($champs_array as $key => $champs)
    {
    		$server_name[$key] = $champs[8];
    		$server_ip[$key] = $champs[9];
    }
    // $server_name et $server_ip SONT DES ARRAY !
    // on peut les utiliser EN DEHORS du foreach

  16. #16
    Membre habitué
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2012
    Messages
    284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2012
    Messages : 284
    Points : 132
    Points
    132
    Par défaut
    merci à vous mais je pense que c'est pas possible en fait

    Je voulais mettre mes constantes dans un fichier de config par exemple (config.php)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    define('SERVER_NAME', $champs_array[0][8]);
    define('SERVER_IP', $champs_array[0][7]);
    Pour qu'a chaque fois je puiss les appeler dans mon foreach sans mettre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    echo $champs[8];
    echo $champs[7];
    Je voulais faire un truc du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    foreach($champs_array as $champs)
    {
    		echo SERVER_NAME;
                    echo SERVER_IP;
     
    }
    Comme ca dans tout mon code si je réutilise SERVER_NAME par exemple, je sais que c'est $champs[8] dans mon fichier ...

    Mais bon pas possible je pense

    Merci

  17. #17
    Membre habitué
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2012
    Messages
    284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2012
    Messages : 284
    Points : 132
    Points
    132
    Par défaut
    Mais sinon je vais le faire dans mes foreach à chaque fois que j'aurais besoin

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $server_name = $champs[8];
    $server_ip = $champs[9];

  18. #18
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 49
    Points : 95
    Points
    95
    Par défaut
    Je ne comprend pas vraiment pourquoi tu désespère.

    Cette variable SERVER_NAME, tu veux la réutilisé seulement dans les foreach parcourant tout les serveur ? (sinon, de toute façon ça ne sera pas très utile)

    Donc je ne voit pas le problème de faire :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    foreach($champs_array as $champs)
    {
    		$SERVEUR_NAME = $champs[8];
    }

    Puis de l'utiliser dans la suite de ton foreach comme ta fameuse constante... Sauf que sa s'apelle $SERVEUR_NAME au lieu de SERVEUR_NAME...

    Si tu veux l'utiliser en dehors des foreach, il faudra que tu sache précisement le serveur de quelle ligne dans le fichier tu veux précisement, a ce moment, tu peux utiliser la 2eme solution de jreaux, et en mettant comme premier indice, la ligne voulu... Mais dans tout les cas, PHP ne devinera pas de quelle ligne tu parle... Donc ton histoire de constante est floue... Tout du moins, comme tu l'a présenté...

  19. #19
    Invité
    Invité(e)
    Par défaut
    Je comprends mieux :
    Tu NE veux PAS avoir besoin de te le RECOGNER A LA MAIN à chaque fois !

    Il y a toujours un moyen :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?php
    foreach($champs_array as $champs)
    {
    		include('config_champs.php');
    		// ........ (suite du traitement, avec des variables explicites !)
    		echo $SERVEUR_NAME;
    		// ........
    }
    Fichier config_champs.php :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php	// Définition des champs/variables, avec des noms explicites
    		// .....
    		$SERVEUR_NAME = $champs[8];
    		$SERVEUR_IP = $champs[9];
    		// .....
    Et le tour est joué.
    CQFD. RATP. BNP. CéKiKaPT.
    Dernière modification par Invité ; 30/08/2013 à 16h33.

  20. #20
    Membre habitué
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2012
    Messages
    284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2012
    Messages : 284
    Points : 132
    Points
    132
    Par défaut
    lol on va y arriver ...

    Je voulais juste les définir une fois pour toute dans un fichier, pour ne pas avoir à les réécrire ensuite si j'en ai besoin.

    ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    define('SERVER_NAME', $champs_array[0][8]);
    define('SERVER_IP', $champs_array[0][7];
    ...
    Y en a 29 au total

    Et quand j'ai besoin de les appeler hop ...

    Dans le foreach c'est cool :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $SERVEUR_NAME = $champs[8];
    ...
    $XXX = $champs[29];
    Mais si je refait un foreach et que je dois sortir un champs en particulier par exemple,

    Je vais devoir remettre les infos :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $SERVEUR_NAME = $champs[8];
    ...
    Dans ma nouvelle boucle foreach

    Vous comprenez mon bazar ?

    Mais je vais faire comme ca

    Merci à vous en tout cas car je n'ai pas été très clair désolé de vous embeter avec mon pb tordu

    Merci à vous 2 et longue vie à developpez.com


+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Enregistrer des fichiers dans une boucle
    Par sebastien06 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 05/04/2008, 13h17
  2. [MySQL] récupérer les dimensions des images dans une boucle while
    Par Navyel dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 26/08/2007, 11h09
  3. [FPDF] tracer des lignes dans une boucle
    Par marielaure2805 dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 29/06/2007, 14h17
  4. Afectation des variables dans une boucle
    Par Yoni Lebene dans le forum Delphi
    Réponses: 3
    Dernier message: 05/01/2007, 18h52

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