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 :

manipuler array avec while


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Meloooo
    Femme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    324
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France

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

    Informations forums :
    Inscription : Novembre 2008
    Messages : 324
    Par défaut manipuler array avec while
    Salut,
    J'ai une table tâches se présentant comme ceci :


    1 | 100 | -
    2 | 100 | 1
    3 | 45 | -
    4 | 30 | 1,2,3

    Colonne 1 : numéro de tâche
    Colonne 2 : pourcentage d'avancement de la tâche
    Colonne 3 : idx_tache pour connaitre l'état d'avancement d'une tache ayant besoin de tâche préalablement fini

    Statut_tache correspond à l'avancement de mes tâches qui se calcule en fonction de mes idx_taches
    Si statut_tache est égale à 0 alors ca veut dire que ma tâche est en attente si elle est comprise entre 1 et 99 ca veut dire qu'elle est en cours et 100 terminé.
    Prenons l'exemple de ma tâche 4, pour qu'elle soit fini à 100% il faut que les tâches 1,2 et 3 soient fini à 100%. Si la tâche 1 est terminé, mais que la tâche 2 et 3 est en cours alors le statut de ma tâche 4 sera "en cours".
    Je ne suis pas très claire, mais j'espère que vous comprendrez un minimum.
    Ce que je souhaites faire c'est récupérer les idx_taches de chacune de mes tâches et analyser leur statut(un par un) pour donner un et un seul statut !
    voici mon code :
    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
     
    $idx_actions = "select idx_action, num_tache from table
    ";
    $query_action = mysql_query($idx_actions);
    $rows = mysql_num_rows($query_action);
    while ($parcours = mysql_fetch_array($query_action))
    {
    	$explode_action = explode(',' , $parcours[0]);
    	//print_r($test = array($parcours[1] => $explode_action));
    	foreach( $explode_action as $value ) {
    	$req_stat = "SELECT tableau_statut FROM tableau_bord WHERE tableau_int = '".$value."' ";
    	$query_stat = mysql_query($req_stat);
    		while($le_parcours = mysql_fetch_array($query_stat))
    		{
    			$array = array($parcours[1] => $le_parcours[0]);
    		}
    	}
    }

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Ta structure n'est pas bonne.
    Il faut une table qui recense les relations.
    id - tache - relation
    1 - 2 - 1
    2 - 4 - 1
    3 - 4 - 2
    4 - 4 - 3

    En une requête tu peux par exemple avoir le nombre de taches liées et non terminées :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT a.avancement, table2.count(tache) as taches_liees FROM table1 a
    LEFT JOIN table2 ON a.id = table2.tache
    JOIN table1 b ON table2.relation = b.id
    WHERE a.id = 4 AND b.avancement < 100
    ou le détail des taches liées
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT tache, avancement FROM table2
    JOIN table1 b ON table2.relation = b.id
    WHERE a.id = 4
    (je n'ai pas validé la requête)
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre éclairé Avatar de Meloooo
    Femme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    324
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France

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

    Informations forums :
    Inscription : Novembre 2008
    Messages : 324
    Par défaut
    Merci de ta réponse sabotage, c'est vrai que c'est plus cohérent d'avoir une table relation je n'y avais pas pensé...
    j'ai donc mis en place ma nouvelle table, j'affiche correctement le statut et les relations... et je voudrais un autre conseil... comment ferais-tu pour "regrouper" mes relations
    c'est à dire par exemple :
    id - tache - relation
    1 - 2 - 1
    2 - 4 - 1
    3 - 4 - 2
    4 - 4 - 3
    Prenons la tâche 4 qui aura qu'un statut(en cours, en attente ou terminé) si la 1,2,3 sont en attente, alors la 4 sera en attente, si une des trois relations est en cours alors la 4 sera en cours, si elles sont terminées alors la 4 sera terminée.
    Je dois faire une requête pour chaque état ? ou y-a t-il une solution plus simple ?

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Le plus simple est de lire les états de toutes les tâches liées

    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
     
    $attente = FALSE;
    $avancement = 0;
    $nbre_taches = mysql_num_rows($result);
    while ($row = mysql_fetch_assoc($result)) {
       if ($row['avancement'] == 0) {
             $attente = TRUE;
       }
       $avancement += $row['avancement'];
    }
     
    if ($attente) {
       $etat = 'En attente';
    }
    elseif ($avancement == $nbre_taches * 100) {
       $etat = 'Terminé';
    }
    else {
        $etat = $avancement / $nbre_taches;
    }
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre éclairé Avatar de Meloooo
    Femme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    324
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France

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

    Informations forums :
    Inscription : Novembre 2008
    Messages : 324
    Par défaut
    J'ai modifié ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    if ($attente == TRUE) {
    		$etat = 'En attente';
    		}
    par celui la :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    if ($attente == TRUE && $avancement == 0) {
    		$etat = 'En attente';
    		}
    Car si il rentre dans ma boucle la premiere fois et que l'état est à 0 alors $attente est à TRUE, et si mon autre tâche est à 55 % il m'affichais quand même en attente...
    Par contre ca ne le fait pas pour chaque tâche, je voudrais par exemple l'état de chacune de mes tâches la il regroupe tous mes tâche en un...

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Ce n'est pas logique : si tu as même une seule tâche en attente, tout ton projet est en attente ; mais bon ce n'est plus une question de code.

    Pour le reste, l'idée était de determiner l'état d'une tache en fonction de taches liées, c'est bien ça que tu voulais non ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

Discussions similaires

  1. [PHP 5.4] manipulation les données d'un array avec foreach et for
    Par aspkiddy dans le forum Langage
    Réponses: 2
    Dernier message: 24/02/2014, 01h22
  2. Manipulation d'arrays avec Boost Spirit
    Par milene31 dans le forum Boost
    Réponses: 10
    Dernier message: 24/06/2013, 15h35
  3. Manipuler des tableaux / Array avec VBA
    Par funtim78 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 12/06/2012, 16h02
  4. [ODBC] manipuler .dbf avec php
    Par jumars dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 14/05/2009, 11h49
  5. [Tableaux] problème avec while
    Par zimotep dans le forum Langage
    Réponses: 3
    Dernier message: 11/09/2005, 11h30

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