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 :

Switch case compliqué


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 26
    Par défaut Switch case compliqué
    Bonjour, je suis un débutant en programmation, vraiment très débutant et je suis confronté à un problème. Voila j'ai créé un programme PHP qui est censé lire un fichier CSV. De ce côté tout se passe bien mais ensuite en fonction de ce que je lis je dois faire des instructions. Par exemple voici quelques lignes parmi les nombreuses de mon fichier :

    "Sacs en Papier","Sac Papier - poignées plates","DPL002","80 grs Blanc","22 + 10 x 31 cm","blanc","€ 0,19","1","doos","250","1"
    "Sacs en Papier","Sac Papier - poignées plates","DPL001","80 grs brun","22 + 10 x 31 cm","brun","€ 0,19","1","doos","250","1"
    "Sacs en Plastique",,"DQU007","Poly","30 x 36 cm","Semi Transparant","€ 0,14","1","doos","500","1"
    "Sacs en Plastique",,"DQU194","Blanc poly","45 x 51 + 2 x 5 cm","Soldes","€ 0,18","1","stuk","500","1"
    "Sacs PP Tissés","Big Shopper PP Tissé","DQP006","tissé PP","45 + 18 x 48 cm","Noir","€ 1,65","1","doos","100","1"
    "Sacs PP Tissés","Big Shopper PP Tissé","DQP001","tissé PP","45 + 18 x 48 cm","Blanc","€ 1,65","1","doos","100","1"
    sur la première colonne il y a des noms de catégories, j'aimerai faire un switch case sur ces noms par exemple quand le nom Sacs en Papier apparaît je souhaiterai faire des instructions une seule fois pour toutes les lignes qui ont ce nom. Seulement j'ai essayé de m'y mettre mais rien ne marche..... il m'affiche plus de 90 fois le même nom :S

    Si quelqu'un peut m'aider je laisse mon programme pour qu'il y voit plus clair :

    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
    <?php
    $row = 1;
    if (($handle = fopen("FF-Webshop-F.csv", "r")) !== FALSE) {
        while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
            $num = count($data);
            $row++;
            for ($c=0; $c < $num; $c++) {
    			$ligne = fgets($handle, 1000);
    			$liste = explode(",", $ligne);
     
    			$liste += array_pad(array(), 11, null);
    			ksort($liste);
    			/*var_dump($liste[0]);*/
    			$liste[0] = str_replace('"', '', $liste[0]);
    			switch($liste[0]){
     
    				case "Sacs en Papier":
    				echo "pouet <br />\n";
    				break;
     
    				case "Sacs en Plastique":
    				echo "pouet2";
    				break;
     
    			}
            }
        }
        fclose($handle);
    }
    ?>
    PS : Les deux echos dans les deux case sont juste des test je sais ce que je dois mettre dans mes case j'ai déjà préparé ça sur papier.

  2. #2
    Membre Expert
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 769
    Par défaut
    j'aimerai faire un switch case sur ces noms par exemple quand le nom Sacs en Papier apparaît je souhaiterai faire des instructions une seule fois pour toutes les lignes qui ont ce nom
    je ne vois pas vraiment l'interet algorithmique... ça demanderai que ton csv soit trié.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 26
    Par défaut
    Je sais mais c'est mon maitre de stage qui m'a dit de faire ça. En fait ce que je cherche à faire c'est par exemple quand mon programme lis les 100 premières lignes du fichier et qu'il voit Sacs en Papier, je voudrais qu'il fasse une requête en disant que ce nom est égal à un nouvel id dans ma bd. Mais je veux qu'il ne le fasse qu'une fois car les 100 première lignes ont le même nom donc elles ont le même id.

  4. #4
    Membre Expert
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 769
    Par défaut
    ok je te donne un meilleur algo.

    comme ça je ne fait qu'un seule traitement pour les "sac en papier"...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $cache = array() 
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
     
    if ( isset( $cache[$data[0]] ) ){
     $cache[$data[0]]++;
     echo 'rencontre ', $data[0], 'pour la ', $cache[$data[0]], ' fois';
    }
    else {
     echo 'premiere fois qu\'on lit ', $data[0];
     $cache[$data[0]]=1;
    }
    }
    Ensuite tu peux récupérer un id au lieu d'afficher le message et ensuite l'avoir dans le cache pour faire la requete d'insertion dans la base...

    Sinon tu as une option full SQL:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    INSERT INTO ... 
    SELECT :speudocolonne1,:speudocolonne2,id 
     FROM table 
     WHERE cond = :condition

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 26
    Par défaut
    En fait mon programme lit bien le fichier car quand j'ai fait un var_dump($liste[0]);, j'ai tous les noms présents dans mon fichier qui s'affichent. Maintenant ce que je cherchais à faire avec mon switch c'était si il avait ce nom il fait ça une fois peut un porte qu'il y ait 100 le même nom et si il y a une autre nom il fait ça et là aussi peut importe le nom vu qu'il ne le ferra qu'une fois

  6. #6
    Membre Expert
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 769
    Par défaut
    c'est pas clair ton truc.. mais si j'ai bien compris... j'ai résolu ton pb.

    un ptit clic sur

Discussions similaires

  1. [Language]Probleme de switch case
    Par nana1 dans le forum Langage
    Réponses: 20
    Dernier message: 17/11/2005, 00h49
  2. switch case pour deux variable en meme temps
    Par petitours dans le forum C
    Réponses: 3
    Dernier message: 06/11/2005, 19h20
  3. [Tableaux] Problème avec Switch case
    Par philippef dans le forum Langage
    Réponses: 4
    Dernier message: 07/09/2005, 16h37
  4. probleme gestion condition switch - case
    Par DarkMax dans le forum Langage
    Réponses: 5
    Dernier message: 07/09/2005, 14h25
  5. [Language] aide sur les switch case
    Par pouss dans le forum Langage
    Réponses: 3
    Dernier message: 05/04/2005, 11h34

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