[résolu]Tableau à 2 dimensions

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [résolu]Tableau à 2 dimensions

Re: Tableau à 2 dimensions

par Jibe » 31 août 2011, 15:06

Ca marche nickel, problème résolu.
Merci bien.

Re: Tableau à 2 dimensions

par Mazarini » 31 août 2011, 14:36

En fait, je n'avais pas compris le problème comme ca. Pour moi 0 était un vrai niveau, mais n'était pas stocké dans la base.
Le plus simple est d'initialiser les tableaux $max, $min et $moy avec 0 pour chaque compétence. Et ensuite tu calcules les valeurs pour lesquels tu a des compétences pour remplacer les 0. Cette initialisation remplace celle de $niv.

Re: Tableau à 2 dimensions

par Jibe » 31 août 2011, 12:09

Une idée ?

Re: Tableau à 2 dimensions

par Jibe » 30 août 2011, 17:14

Comment faire un mixe des deux pour avoir :

Array ( [77] => Array ( [2] => 2 ) [80] => Array ( [2] => 4 ) [38] => Array ( [2] => 2 ) [14] => Array ( [2] => 3 ) [55] => Array ( [1] => 0 [2] => 0 ) [19] => Array ( [1] => 0 [2] => 0 ) [45] => Array ( [2] => 1 ) )

Si pour une compétence il existe au moins un niveau différent de 0, on supprime les 0 sinon on les laisse :( :shock: :?:

Re: Tableau à 2 dimensions

par Jibe » 30 août 2011, 16:01

Je dois surement me tromper d'endroit :
$niv = array();
				$sql = $bdd->query('SELECT codecomp FROM l_miss_comp WHERE codemiss = '.$codemiss.'');
				while($don = $sql->fetch())
				{
					$codeco = $don['codecomp'];
					
					$sq = $bdd->query('SELECT matricule FROM l_collab_eq WHERE codeeq = '.$codeeq.'');
					while($do = $sq->fetch())
					{
						$mat = $do['matricule'];
                                                $niv[$codeco][$mat] = 0;
						
						$s = $bdd->query("SELECT DISTINCT nive FROM l_collab_niv_fct WHERE date = '$datet' AND matricule = ".$mat." AND codecomp = ".$codeco."");
						while($te = $s->fetch())
						{	
							$niv[$codeco][$mat] = $te['nive'];
						}
					}
				}
Là du coup pour chaque acteur j'aurai une valeur = 0. Donc pour les compétences ou aucun acteur n'a de niveau c'est bon mais pour les autres ca me rajoute un 0 au calcul de moyenne, min et max. Je l'ai instancié au mauvais endroit ou de la mauvaise manière ?

Voilà les codes des compétences :
77
80
38
14
55
19
45

Sans l'instancier, j'ai ca :
Array ( [77] => Array ( [2] => 2 ) [80] => Array ( [2] => 4 ) [38] => Array ( [2] => 2 ) [14] => Array ( [2] => 3 ) [45] => Array ( [2] => 1 ) )

En l'instanciant j'ai ca :
Array ( [77] => Array ( [1] => 0 [2] => 2 ) [80] => Array ( [1] => 0 [2] => 4 ) [38] => Array ( [1] => 0 [2] => 2 ) [14] => Array ( [1] => 0 [2] => 3 ) [55] => Array ( [1] => 0 [2] => 0 ) [19] => Array ( [1] => 0 [2] => 0 ) [45] => Array ( [1] => 0 [2] => 1 ) )


Ce qui veut dire que par exemple pour la compétence 77, la moyenne sera sans instancier 2 et en instanciant 1... (la moyenne correct étant 2)

Re: Tableau à 2 dimensions

par Mazarini » 30 août 2011, 15:45

Tu peux initialiser le $niv[$codeco][$mat] à 0 avant de l'alimenter avec les valeurs de la base dans la mesure ou tu connais les compétences et les personnes.

Re: Tableau à 2 dimensions

par Jibe » 30 août 2011, 14:57

Oui c'est bien ça. Merci Mazarini, j'ai trouvé en cherchant sur le net peu de temps avant que tu répondes.
J'ai une dernière question.
Il est possible que les acteurs n'est pas un niveau pour toutes les compétences d'une missions, si c'est le cas le nombre de valeurs ne sera donc pas le même entre celles que j'obtiens à partir des calculs par les variables php et celles que j'extrais de la base.
Du coup, comment faire une comparaison entre 2 tableaux et si l'un est plus grand que l'autre, rajouter les clés manquantes avec 0 pour valeur ?

Re: Tableau à 2 dimensions

par Mazarini » 30 août 2011, 13:44

En remplacant
$niv[$codeco]=array(
'moyenne'=>array_sum($mat)/count($mat),
'max' =>max($mat),
'min' =>min($mat)
);

par

$moy[$codeco] = array_sum($mat)/count($mat);
$max[$codeco] = max($mat);
$'min[$codeco] = min($mat);

Re: Tableau à 2 dimensions

par Jibe » 30 août 2011, 10:49

OK, je vais essayer d'expliquer ça clairement. Le but de cette partie de mon application c'est de comparer les compétences d'une équipe aux compétences d'une mission. Dans la 1ère IHM, l'utilisateur sélectionne une mission, une équipe et une date. Pour l'extraction de données en base :
$niv = array();
				$sql = $bdd->query('SELECT codecomp FROM l_miss_comp WHERE codemiss = '.$codemiss.'');
				while($don = $sql->fetch())
				{
					$codeco = $don['codecomp'];
					
					$sq = $bdd->query('SELECT matricule FROM l_collab_eq WHERE codeeq = '.$codeeq.'');
					while($do = $sq->fetch())
					{
						$mat = $do['matricule'];
						
						$s = $bdd->query("SELECT DISTINCT nive FROM l_collab_niv_fct WHERE date = '$datet' AND matricule = ".$mat." AND codecomp = ".$codeco."");
						while($te = $s->fetch())
						{	
							$niv[$codeco][$mat] = $te['nive'];
						}
					}
				}
								
				foreach($niv as $codeco=>$mat){

				$niv[$codeco]=array(
					'moyenne'=>array_sum($mat)/count($mat),
					'max'    =>max($mat),
					'min'    =>min($mat)
					);
					}

				$_SESSION['eq'] = $codeeq;
				$_SESSION['miss'] = $codemiss;
				$_SESSION['nivcolabcomp'] = $niv; 
La première requête sort les compétences de la missions. La deuxième extrait les acteurs qui composent l'équipe. La troisième sélectionne le niveau de ces acteurs quand ils ont les compétences qui correspondent à celles de la mission.

Puis voilà la page de création du graphique (enfin juste le code d'extraction):
$eq = $_SESSION['eq'];
$miss = $_SESSION['miss'];
$niv = $_SESSION['nivcolabcomp'];
 
$requ = $bdd->query('SELECT codescomp, niveau FROM l_miss_scomp WHERE codemiss = '.$miss.'');
$scomp = array();
$niv = array();
while($donn = $requ->fetch())
{
	$codesc = $donn['codescomp'];
	$niv_cible[] = $donn['niveau'];
	
	$rep = $bdd->query('SELECT libscomp FROM scompetence WHERE codescomp = '.$codesc.'');
	while($donnees = $rep->fetch())
	{
		$scomp[] = $donnees['libscomp'];
	}
}
La 1ère requête sélectionne les codes des compétences de la missions avec les niveaux cibles et la 2ème requête sort les libellés des compétences. Donc sur mon graphique en toile d'araignée j'aurai un premier tracé correspondant aux compétences de la mission avec leur niveaux cibles. Sur ce même graphique je voudrais insérer les min, max et moy de contenues dans mon tableau à 2 dimensions mais je ne sais pas comment faire pour avoir un
$min[] = valeur des min pour chaque compétences
$max[] = valeur des max pour chaque compétences
$moy[] = valeur des moyennes pour chaque compétences
Est-ce plus claire ?

Re: Tableau à 2 dimensions

par jojolapine » 30 août 2011, 10:30

Bonjour,

Il faudrait avant tout nous montrer à quoi ressembles les données utilisables pour la construction de ton graphique...
En gros tu pars de quoi, et tu veux aller où...

Re: Tableau à 2 dimensions

par Jibe » 30 août 2011, 10:20

Merci pour ta réponse Mazarini mais mon problème n'est pas le tracé du graphique. Ca je sais le faire. Ce qui me pose problème c'est l'exploitation des données de mon tableau à 2 dimensions.
J'aimerai faire 3 tableaux :
$max[]
$moy[]
$min[]
à partir des données contenues dans le tableaux à 2 dimensions, mais je ne sais pas faire.

Re: Tableau à 2 dimensions

par Mazarini » 30 août 2011, 10:16

Bonjour,

pour créer une image à partir d'un modèle : http://www.php.net/manual/fr/function.i ... romgif.php
pour tracer un polygone : http://www.php.net/manual/fr/function.imagepolygon.php
Autrement, il existe les fonctions sin() et cos() pour calculer tes points.

Bon courage

Re: Tableau à 2 dimensions

par Jibe » 30 août 2011, 09:45

Mais moi je dois faire tourner ça dans une application intranet ou quand tu appuies sur un bouton, le graphique s'affiche

Re: Tableau à 2 dimensions

par sirakawa » 29 août 2011, 17:42

Moi qui suis basiquement idiot, je chercherais à exporter mon tableau et à le faire traiter par un logiciel de stats quelconque, depuis un tableur jusqu'à R ...
Mais ce que j'en dis ou souffler dans le pavillon d'une clarinette dans l'espoir d'entendre le son d'un violon, c'est blanche-neige et femme de héros, disait le capitaine Héro venu faire une conférence sur la drogue (authentique)

Re: Tableau à 2 dimensions

par Jibe » 29 août 2011, 17:35

Peut-être allez-vous pouvoir m'aider pour la suite.

Voilà un code qui va me permettre de générer mes graphiques :
$requ = $bdd->query('SELECT codescomp, niveau FROM l_miss_scomp WHERE codemiss = '.$miss.'');
$scomp = array();
$niv = array();
while($donn = $requ->fetch())
{
	$codesc = $donn['codescomp'];
	$niv[] = $donn['niveau'];
	
	$rep = $bdd->query('SELECT libscomp FROM scompetence WHERE codescomp = '.$codesc.'');
	while($donnees = $rep->fetch())
	{
		$scomp[] = $donnees['libscomp'];
	}
}
Il faudrait que mettre là dedans $moy[], $min[] et $max[] par rapport à ce qui a été dit précédemment et je n'ai aucune idée de comment faire. En gros je veux faire un graphique en toile d'araignée avec les compétences, min, max et moyenne.

Merci.