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 :

[CSV] Appel array à l'exterieur de la boucle qui la remplit


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 9
    Points : 5
    Points
    5
    Par défaut [CSV] Appel array à l'exterieur de la boucle qui la remplit
    Bonjour,

    J'essaie premièrement d'afficher les tarifs d'un poids donné quelque soit la zone ou le pays.
    ensuite dans un second temps j'aimerai qu'il n'affiche le poids et le tarif mais pour un pays donné. (pas encore codé cette partie mais si vous avez des conseils, 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
    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
    48
    49
    50
    <?php 
    $weight_total = "2.00";
    $country_code = "FR";
    
    $wt = $weight_total;
    $cc = $country_code;
    
    $poids_tarifs = array();
    
    // Lit une page web dans un tableau.
    $lines = file ('chronopost.csv');
    
    // Affiche toutes les lignes du tableau comme code HTML, avec les numéros de ligne
    foreach ($lines as $line_num => $line) {
    	global $lespays, $poids_tarifs;
    	list($zone_pays, $taux) = explode(";", htmlspecialchars($line));
    
    	// séparation de la zone des pays
    	list($zone, $list_pays) = explode("=", htmlspecialchars($zone_pays));
    	$lespays = array();
    	$lespays = explode(",", $list_pays);
    	for ($it = 0; $it < sizeof($lespays); $it++) {
    			$pays_in_zone = array($lespays[$it] => $zone);
    			//echo "<br>" . $lespays[$it] . " => " . $pays_in_zone[$lespays[$it]];
    	
    	}
    	//echo "<br>";
    
    	// séparation de poids des tarifs
    	$poids_tarifs_tab = array();
    	$poids_tarifs_tab = explode(",", $taux);
    	//echo "<br>";
    	for ($i = 0; $i < sizeof($poids_tarifs_tab); $i++ ) {
    		//echo $poids_tarifs_tab[$i];
    		list($poids, $prix) = explode(":", $poids_tarifs_tab[$i]);
    		//echo $poids . " => " . $prix . "\n";
    		$poids_tarifs = array($poids => $prix);
    
    		//echo "<br>" . $poids . " => " . $poids_tarifs[$poids] . "<br>";
    
    		// place code 2
    	}
    	
    }
    	echo $pays_in_zone[$cc];	
    	echo "<br>" . $wt . " => " . $poids_tarifs[$wt] . "<br>";
    
    	echo $cc;
    	
    ?>
    ca me renvoie

    2.00 =>
    FR
    alors que ca devrai être toutes les occurences de 2.00 dans le fichier csv

    la structure du csv :
    Zone1=codePays1,codepays2;poids1:prixdupoids1,poids2:prixdupoids2,etc
    Par contre si je mets la ligne de code qui est en rouge à la place du commentaire ne bleu, j'obtiens :

    2.00 =>

    2.00 =>

    2.00 =>

    2.00 => 74.28

    2.00 =>

    2.00 =>

    2.00 =>

    2.00 =>

    2.00 =>

    2.00 =>

    2.00 =>

    2.00 =>

    2.00 =>

    2.00 =>

    2.00 =>

    2.00 =>

    2.00 =>

    2.00 =>

    2.00 =>

    2.00 =>

    2.00 =>

    2.00 =>

    2.00 =>

    2.00 => 100.37

    2.00 =>

    2.00 =>

    2.00 =>

    2.00 =>

    2.00 =>

    2.00 =>

    2.00 =>

    2.00 =>

    2.00 =>

    2.00 =>

    2.00 =>

    2.00 =>

    2.00 =>

    2.00 =>

    2.00 =>

    2.00 =>

    2.00 =>

    2.00 =>

    2.00 =>

    2.00 => 84.54

    2.00 =>

    2.00 =>

    2.00 =>

    2.00 =>

    2.00 =>

    2.00 =>

    2.00 =>

    2.00 =>

    2.00 =>

    2.00 =>

    2.00 =>

    2.00 =>

    2.00 =>

    2.00 =>

    2.00 =>

    2.00 =>

    2.00 => 24.20

    2.00 =>

    2.00 =>

    2.00 =>

    2.00 =>

    2.00 =>

    2.00 =>
    FR
    Alors que j'attendrai plus quelque chose comme

    Zone 1 : 2.00 => 74.28

    ZOne 2 : 2.00 => 100.37


    zone 3 : 2.00 => 84.54


    zone 3 :2.00 => 24.20

    FR
    Pouvez vous m'aider ? Merci

  2. #2
    Membre confirmé Avatar de SphynXz
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    439
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 439
    Points : 547
    Points
    547
    Par défaut
    c'est assez fouillis ton code, tu vas lutter pour te remettre dans ce code plus tard

    déjà :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    $poids_tarifs = array($poids => $prix);

    ce code te recréé le tableau $poids_tarifs à chaque exécution. jamais il n'ajoutera une ligne à ton tableau. je prefère que cela soit clair au cas ou tu ne le savais pas

    d'autre part, si tu souhaite avoir un tableau comme tu le souhaite, tu ne peux avoir ton poids pour clé de tableau. il te faut mettre la zone! et pour ajouter une ligne, tu peux par exemple faire comme ceci :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $poids_tarifs['Zone1'] = array($poids => $prix);

    PS : as tu regardé du coté de la fonction parse_ini_file?

  3. #3
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par SphynXz Voir le message
    c'est assez fouillis ton code, tu vas lutter pour te remettre dans ce code plus tard

    déjà :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    $poids_tarifs = array($poids => $prix);

    ce code te recréé le tableau $poids_tarifs à chaque exécution. jamais il n'ajoutera une ligne à ton tableau. je prefère que cela soit clair au cas ou tu ne le savais pas
    j'y avai pas pensé

    et je regarde pour la fonction que tu m'as donné

    merci

  4. #4
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    bon bein déjà j'ai de meilleurs résultats qu'avec ma méthode

    merci beaucoup

  5. #5
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    bon ok

    maintenant je me retrouve avec

    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
    $weight_total = "1.50";
    $country_code = "FR";
     
    $wt = $weight_total;
    $cc = "/^" . $country_code . "/";
     
    // Analyse sans sections
    $ini_array = parse_ini_file("chronopost2.ini");
    //print_r($ini_array);
    echo "<br>";
     
    // Analyse avec sections
    $ini_array = parse_ini_file("chronopost2.ini", true);
    //print_r($ini_array);
     
    echo $wt . "kg à " . $ini_array["Zone3"][$wt] . "€";
     
    ?>
    qui m'affiche correctement un truc du genre
    1.50kg à 71.13€
    mais je ne vois pas comment trouver à quel zone correspond $country_code

    sachant que mon ini est de la forme :

    [Zone2]
    Pays = DE,ES,IT,NL,GB
    0.50 = 64.62
    parce que moi comme parametre j'aurai le poids total et le pays et je dois trouver la zone correspondante au pays et le tarif lié au poids pour la zone donnée

  6. #6
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    bon j'ai décidé de tester chacune des zones. il n'y en a que 12.

    ça fera du code mais au moins tout sera testé ...


    merci quand même
    je vais mettre une réglé dans le titre

  7. #7
    Membre confirmé Avatar de SphynXz
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    439
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 439
    Points : 547
    Points
    547
    Par défaut
    on peut peut-être pousser ton code plus loin, imagine que plus tard tu ajoute une zone, tu dois ajouter une vérification

    montre le code final et on pourra arriver à un vrai code dynamique que tu n'auras pas à modifier tout les quatre matin


    PS : Php à déjà créé beaucoup de fonction comme parse_ini_file() pour éviter d'avoir à créer nos propres fonctions. Quand tu es persuadé que ce que tu cherche à faire à surement était déjà pensé, regarde du coté du manuel php, ca t'evitera des heures de développement pour au final avoir réinventé la roue

  8. #8
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Pour l'instant j'en suis la
    je fais des tests qu'avec 4 zones

    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
    <?php
    $weight_total = "1.50";
    $country_code = "IT";
     
    $wt = $weight_total;
    $cc = "/" . $country_code . "/";
     
    // Analyse sans sections
    $ini_array = parse_ini_file("chronopost2.ini");
    //print_r($ini_array);
    echo "<br>";
     
    // Analyse avec sections
    $ini_array = parse_ini_file("chronopost2.ini", true);
    //print_r($ini_array);
     
    //echo $wt . "kg à " . $ini_array["Zone3"][$wt] . "€";
     
    //echo $ini_array["Zone3"]["Pays"]; // affiche les pays de la dite zone
    //echo "<br>";
    //echo preg_match($cc,$ini_array["Zone3"]["Pays"]);
    //echo "<br>";
     
     
     
    $pays_dans_zone1 = preg_match($cc,$ini_array["Zone1"]["Pays"]);
    $pays_dans_zone2 = preg_match($cc,$ini_array["Zone2"]["Pays"]);
    $pays_dans_zone3 = preg_match($cc,$ini_array["Zone3"]["Pays"]);
    $pays_dans_zone_domestique = preg_match($cc,$ini_array["Domestique"]["Pays"]);
     
    if ($pays_dans_zone1 == "1") {
    	echo $wt . "kg à " . $ini_array["Zone1"][$wt] . "€";
    }
     
    if ($pays_dans_zone2 == "1") {
    	echo $wt . "kg à " . $ini_array["Zone2"][$wt] . "€";
    }
     
    if ($pays_dans_zone3 == "1") {
    	echo $wt . "kg à " . $ini_array["Zone3"][$wt] . "€";
    }
     
    if ($pays_dans_zone_domestique == "1") {
    	echo $wt . "kg à " . $ini_array["Domestique"][$wt] . "€";
    }
     
    ?>
    et je suis confronté à un nouveau problème
    qui est que mon $weight_total, il ne sera presque jamais exactement égal à un poids défini dans mon ini
    donc il faut encore que je n'affiche que le tarifs du poids max
    cad : exemple mon $weight_total = 3.58; dans ma base ini, j'ai pas de valeur pour 3.58 mais j'ai pour 3.50 ou 4.00 donc je devrai prendre la valeur associé à 4.00

Discussions similaires

  1. low d un array of record : pb ds boucle FOR
    Par sp2308 dans le forum Débuter
    Réponses: 9
    Dernier message: 24/01/2009, 20h09
  2. Appel d'une procédure dans une boucle
    Par Microturnip dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 19/06/2008, 04h46
  3. Réponses: 2
    Dernier message: 14/07/2006, 19h37
  4. Appel d'une fonction dans uns boucle d'un tableau
    Par PrinceMaster77 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 04/02/2005, 16h37
  5. [langage] appel de programmes exterieurs
    Par martijan dans le forum Langage
    Réponses: 34
    Dernier message: 07/07/2003, 11h40

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