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 :

[Tableaux] Hiérarchie et récursivité (est-ce que mon code est bon?)


Sujet :

Langage PHP

  1. #1
    Membre régulier Avatar de ToxiK
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 152
    Points : 73
    Points
    73
    Par défaut [Tableaux] Hiérarchie et récursivité (est-ce que mon code est bon?)
    Bonjour

    J'aimerais établir une hiérarchie en ne connaissant que le responsable de chaque salarié (un salarié ayant son code salarié comme code responsable est donc en haut de la hiérarchie).

    Il m'a donc fallu user de la récursité pour remplir et afficher les tableaux.

    J'aimerais maintenant savoir si mon code est bon et si il est sensiblement améliorable.

    Merci de jeter un oeuil

    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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
     
    //Fonction d'affichage
    function affiche_tableau($tableau)
    {
    	foreach ($tableau as $cle=>$valeur) 
    	{
    		// Si l'un des éléments est lui même un tableau
    		// alors on applique la fonction à ce tableau
    		if(is_array($valeur)) 
            {
    			// On affiche le nom de la clé et
                // le début d'une liste pour
                //  décaler le contenu vers la droite
                echo $cle." : <ul>\n"; 
     
                // Ici se réalise la récursivité
                // c'est à dire qu'on applique la fonction
                // à l'élément en cours car c'est lui aussi un tableau
                affiche_tableau($valeur); 
     
                // On ferme la liste
                echo "</ul>\n"; 
    		}
            // Si ce n'est pas un tableau
            // alors on affiche le contenu de l'élément
    		else
    		{
    			echo $cle." = ".$valeur." <br />\n";  
    		};
    	};
    };
     
     
    // Fonction qui récupère les salariés qui n'ont pas de responsable (donc en haut de la hiérarchie)
    function sans_responsable($w_rs)
    {
    	$i=0;
    	while($enreg=mysql_fetch_array($w_rs))
    	{
    		global $tab_hier;
    		global $tab_deja_entre;
    		if( ($enreg["code_sal"]==$enreg["code_res"] OR empty($enreg["code_res"])) && !in_array($enreg["code_sal"], $tab_deja_entre) )
    		{
    			$tab_hier[$i]["code_sal"]=$enreg["code_sal"];
    			$tab_hier[$i]["supervise"]=array();
    			$tab_deja_entre[]=$enreg["code_sal"];
    			$i++;
    		};
    	};
    };
     
     
    // Fonction récursive qui remplie les tableaux
    function hierarchie($w_rs,&$tableau)
    {
    	global $tab_deja_entre;
     
    	$i=0;
    	foreach ($tableau as $cle=>$valeur) 
    	{
    		$j=0;
    		mysql_data_seek($w_rs,0);
    		while($enreg=mysql_fetch_array($w_rs))
    		{	
    			if($valeur["code_sal"]==$enreg["code_res"] && !in_array($enreg["code_sal"], $tab_deja_entre))
    			{
    				$tableau[$i]["supervise"][$j]["code_sal"]=$enreg["code_sal"];
    				$tableau[$i]["supervise"][$j]["supervise"]=array();
     
    				$tab_deja_entre[]=$enreg["code_sal"];
     
    				if(is_array($tableau[$i]["supervise"][$j])) 
    				{
    					hierarchie($w_rs,$tableau[$i]["supervise"]);
    					mysql_data_seek($w_rs,0);
    				}
    				else
    				{
    					echo "Ce n'est pas un tableau";
    				};
    				$j++;
    			};			
    		};
    		$i++;		
    	};
    };
     
     
    ###  Connexion
    $mysql_connexion = mysql_connect("localhost", "root", "");
    mysql_select_db('bdd_Test',$mysql_connexion);
    $req = 'SELECT code_sal, code_res FROM table_test';
    $rs = mysql_query($req) or die('Erreur SQL !<br>'.$req.'<br>'.mysql_error()); 
     
     
    ### Déclarations
    $tab_hier=array();
    $tab_deja_entre=array();
     
     
    ### Code
     
    sans_responsable($rs);
     
    hierarchie($rs,$tab_hier);
     
     
    echo "<br />Tableau de la hiérarchie<br />\n";
    affiche_tableau($tab_hier);
     
    echo "<br /><br />Tableau deja entre<br />\n";
    affiche_tableau($tab_deja_entre);
    Voilà aussi l'extrait de la table:
    Code sql : 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
     
    CREATE TABLE `table_test` (
      `code_sal` int(11) NOT NULL default '0',
      `code_res` int(11) NOT NULL default '0'
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
     
    INSERT INTO `table_test` VALUES (235, 1310);
    INSERT INTO `table_test` VALUES (245, 1310);
    INSERT INTO `table_test` VALUES (320, 1310);
    INSERT INTO `table_test` VALUES (321, 1310);
    INSERT INTO `table_test` VALUES (1000, 1000);
    INSERT INTO `table_test` VALUES (1110, 1000);
    INSERT INTO `table_test` VALUES (1115, 1000);
    INSERT INTO `table_test` VALUES (1120, 1110);
    INSERT INTO `table_test` VALUES (1132, 4100);
    INSERT INTO `table_test` VALUES (1310, 1000);
    INSERT INTO `table_test` VALUES (1320, 1320);
    INSERT INTO `table_test` VALUES (1321, 1320);
    INSERT INTO `table_test` VALUES (4100, 1000);
    INSERT INTO `table_test` VALUES (356, 1115);
    INSERT INTO `table_test` VALUES (567, 1115);
    INSERT INTO `table_test` VALUES (1990, 1132);
    INSERT INTO `table_test` VALUES (1180, 1132);

  2. #2
    Membre régulier Avatar de ToxiK
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 152
    Points : 73
    Points
    73
    Par défaut

Discussions similaires

  1. Est ce que mon salaire est CONVENABLE ?
    Par aladin83 dans le forum Paie
    Réponses: 7
    Dernier message: 13/08/2010, 21h38
  2. Est ce que mon Pc est infecté ou pas ?
    Par kotor27 dans le forum Sécurité
    Réponses: 2
    Dernier message: 30/01/2008, 20h09
  3. Est ce que mon programme est juste ?
    Par autoin dans le forum C
    Réponses: 6
    Dernier message: 25/01/2008, 17h06
  4. est ce que mon proxy est sécurisé avec cette config?
    Par kerkennah dans le forum Sécurité
    Réponses: 1
    Dernier message: 23/05/2007, 17h45
  5. [Dates] calcul de date est ce que mon code est bon?
    Par carmen256 dans le forum Langage
    Réponses: 2
    Dernier message: 09/06/2006, 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