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 :

Parcourir deux array à la manière de deux boucle while [PHP 5.3]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Inactif
    Inscrit en
    Mars 2010
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 15
    Par défaut Parcourir deux array à la manière de deux boucle while
    Bonjour,

    J'ai des requêtes composées de deux boucles qui s'éxécute pendant 45mn environ (script avec méthode curl) pendant l'exécution j'ai des erreurs
    de connexion du à la limite de connexion qui m'est imposer par hébergeur (Nombre de connexions simultanées 3).

    Voici mon code simplifié:
    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
    $cn = mysql_connect($db_host, $db_user, $db_pass);
    mysql_select_db($db_name) or die("Connexion à la base de donnée impossible");
     
    $sql = "SELECT champ_1 FROM categorie"; 
    $res = mysql_query($sql) or die($sql.mysql_error());
    while ($res_a = mysql_fetch_array($res)) 
    {
    	// traitement ...
     
    		$sql = "SELECT champ_2 FROM departement"; 
    		$res = mysql_query($sql) or die($sql.mysql_error());
    		while ($res_b = mysql_fetch_array($res)) 
    		{		
    			// traitement curl ...
    			// puis sauvegarde du résultat ...			
    		}
    }
     
    mysql_close($cn);
    Comment pourrais je faire pour éviter ses problèmes ?

    La table categorie contiens 42 champs à extraire et la table departement contiens 101 champs, j'ai penser à stocker les résultats dans deux array distinct en dur et de faire un forech exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    array ('auto','maison','divers' etc ...);
    array ('paris','picardie','var' etc ...);
    Mais je ne vois pas comment passer à la pratique, c'est à dire de parcourir les deux array comme le ferait deux boucle while.

    Le but est de simuler deux boucles while faite par des requêtes normalement et de laisser travailler php à la place d'une requête mysql pour récupérer le résultat afin d'éviter de laisser les connexions trop longtemps ouvertes ...


    Merci pour votre aide.

  2. #2
    Membre confirmé
    Femme Profil pro
    Technicien Help Desk
    Inscrit en
    Mars 2010
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Mars 2010
    Messages : 67
    Par défaut
    Tu peux toujours utiliser un while. Lorsque tu récupère tes données, tu place avant ton while :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $nba=0;
    $ta=array();
    $nbb=0;
    $tb=array();
    while ($res_a = mysql_fetch_array($res)) 
    {
      $t[$nba]=$res_a;
      $nba++;
    }
    //idem pour le while b
    et pour les traitements :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for($i=0;$i<$nba;$i++){
      // traitement
     
      for($j=0;$j<$nbb;$j++){
          // traitement
      }
    }

  3. #3
    Inactif
    Inscrit en
    Mars 2010
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 15
    Par défaut
    Tout d'abord merci pour ton aide Lilouse.

    Si j'ai bien compris ta méthode permet de faire une seule requête et de stocker le résultat dans un array afin d'éviter de parcourir à chaque fin de boucle les tables ?

    Si c'est ça pourquoi pas ! Moi je voyais quelque chose de plus extrême c'est à dire de ne pas faire du tout de requête mais d'écrire en dur les array pour ensuite les utilisés.

    Comme cela je fait aucune requête pour remplir les array puisque qu'il sont déjà renseigner manuellement.

    Tu me suis ?

  4. #4
    Membre émérite Avatar de sebhm
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2004
    Messages
    1 090
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 090
    Par défaut
    bonjour,

    j'ai pas compris le probleme (ni la solution proposée d'ailleurs).

    Quelle erreur as tu ? A quel moment ?

    tu utilises la variable $res 2 fois : la seconde ecrase la premiere, d'où je pense un premier probleme

  5. #5
    Inactif
    Inscrit en
    Mars 2010
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 15
    Par défaut
    Citation Envoyé par sebhm Voir le message
    bonjour,

    j'ai pas compris le probleme (ni la solution proposée d'ailleurs).

    Quelle erreur as tu ? A quel moment ?

    tu utilises la variable $res 2 fois : la seconde ecrase la premiere, d'où je pense un premier probleme
    Oui en effet en simplifiant mon code je me suis tromper, le problème ne viens pas de là car en réalité elle sont nommée $res_1 pour la première boucle et $res_2 pour la seconde.


    En gros le traitement des deux boucles prends du temps à cause de curl qui doit ensuite faire sont travail se qui fait que ma connexion mysql reste trop longtemps ouverte.

    Je voudrait ne plus faire de requête pour récupérer les noms des catégories et des départements mais de renseigner manuellement les noms dans deux array.

    exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    array ('auto','maison','divers' etc ...);
    array ('paris','picardie','var' etc ...);
    et de les parcourirs comme je le ferais à la manière des boucles while ainsi je fait aucune requête sql.

  6. #6
    Membre émérite Avatar de sebhm
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2004
    Messages
    1 090
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 090
    Par défaut
    OK.

    deja, renseigner les valeurs en dur dans un tableau, c'est moins bien que d'aller les chercher dynamiquement.
    Je te conseille donc de commencer par tes 2 requetes, et d'enregistrer le resultat dans 2 tableaux.

    quoiqu'il en soit, une fois que tu as tes 2 tableaux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $tab1 = array ('auto','maison','divers' etc ...);
    $tab2 = array ('paris','picardie','var' etc ...);
    on parcours un tableau comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    foreach($tab1 as $une_valeur)
      echo $une_valeur.'<br />'; //pour tester
    mais je ne suis en fait pas sûr de bien comprendre le probleme, sinon ca veut dire que tu sais faire des requetes SQL et du CURL mais pas parcourir un tableau....

  7. #7
    Membre confirmé
    Femme Profil pro
    Technicien Help Desk
    Inscrit en
    Mars 2010
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Mars 2010
    Messages : 67
    Par défaut
    Citation Envoyé par jflorence Voir le message
    Tout d'abord merci pour ton aide Lilouse.

    Si j'ai bien compris ta méthode permet de faire une seule requête et de stocker le résultat dans un array afin d'éviter de parcourir à chaque fin de boucle les tables ?
    Oui c'est bien à ce que je pensais : un acces à la bd pour remplir les tableau et un traitement séparé de l'acces au donné.

    Si tu souhaite tout de même séparé le tout, tu peux utiliser une boucle foreach() pour parcourir tes éléments du tableau 1 à 1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    foreach($tab1 as $res1)
    {
      // traitement
      foreach($tab2 as $res2)
      {
        // traitement
      }
    }
    EDIT : je suis trop lente pour écrire...

  8. #8
    Inactif
    Inscrit en
    Mars 2010
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 15
    Par défaut
    Citation Envoyé par Lilouse Voir le message
    Oui c'est bien à ce que je pensais : un acces à la bd pour remplir les tableau et un traitement séparé de l'acces au donné.

    Si tu souhaite tout de même séparé le tout, tu peux utiliser une boucle foreach() pour parcourir tes éléments du tableau 1 à 1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    foreach($tab1 as $res1)
    {
      // traitement
      foreach($tab2 as $res2)
      {
        // traitement
      }
    }
    EDIT : je suis trop lente pour écrire...
    C'est parfait merci encore.

    Merci également à sebhm.


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

Discussions similaires

  1. Réponses: 12
    Dernier message: 29/06/2014, 19h56
  2. multiples array dans un, combiner avec boucle while
    Par leymiris dans le forum Langage
    Réponses: 2
    Dernier message: 27/07/2010, 16h19
  3. [Tableaux] calcul sur deux array
    Par gemça dans le forum Langage
    Réponses: 5
    Dernier message: 19/12/2007, 07h29
  4. [MySQL] gestion d'affichage entre deux boucle while mysql_fetch_array()
    Par tkwleboss dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 29/11/2007, 21h37
  5. Comparaison de données entre deux arrays
    Par sironimo dans le forum Général Dotnet
    Réponses: 6
    Dernier message: 20/04/2006, 17h44

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