Tableau trois dimensions

Fermé
kyuubi6 - 9 févr. 2012 à 13:20
 kyuubi6 - 10 févr. 2012 à 11:32
Bonjour tout le monde,

Je suis entrain de sécher sur une bêtise à mon avis et ça me rend fou lol.
Je dois faire un tableau dynamique à trois dimension :
En fait j'ai un tableau qui se rempli puis un tableau deux dimensions rempli par le premier puis j'aimerais faire comme je fais pour le précédent et remplir mon tableau trois dimensions par celui de deux.
Ce tableau me permettra d'avoir le prénom d'une personne avec sa semaine avec son jour ainsi je pourrai afficher par prénom toutes les semaines qu'il a presté et dans chaque semaine ces heures correspondant au jour.
Je dois le faire avec un tableau trois dimension car je dois d'abord récupérer toutes mes valeurs pour les afficher après dans un pdf avec fpdf.
Merci de votre aide



A voir également:

7 réponses

titus22 Messages postés 1918 Date d'inscription jeudi 1 décembre 2011 Statut Membre Dernière intervention 16 février 2012 636
9 févr. 2012 à 13:26
J'avoue ne pas avoir bien compris ce que vous cherchiez a faire.
Ne serait t'il pas plus sage de faire une base de donnée ?
0
J'ai une base de données qui contient les informations mais avec fpdf (pour créé un pdf) je ne peux pas faire de echo, je fais donc des while qui récupère mes données que je stock dans des tableaux pour pouvoir afficher après. Faire un tableau une et deux dimensions mais j'arrive pas à faire l'opération pour un trois dimensions.
En therme de code j'ai :
while(){
tableau1 = array(donnees1,donnees2,donnees3,donnees4) ;
tableau2[] = $tableau1 ;
}
je pensais faire ici tableau3[] = tableau2 ;
mais j'ai une erreur : Fatal error: Cannot use [] for reading in
merci
0
Mihawk Messages postés 4315 Date d'inscription mercredi 29 mars 2006 Statut Contributeur Dernière intervention 6 janvier 2015 846
9 févr. 2012 à 14:29
Hello,

Heu dans ton cas tu te retrouves avec tableau2 = tableau1...
Essaye plutôt un truc du genre :

while(){
   tableau1_1 = array(donnees11,donnees12,donnees13,donnees14) ;
   tableau1_2 = array(donnees21,donnees22,donnees23,donnees24) ;
   tableau1_3 = array(donnees31,donnees32,donnees33,donnees34) ;
   tableau1_4 = array(donnees41,donnees42,donnees43,donnees44) ;

   // Les tableaux 2 sont des tableaux de tableaux
   tableau2_1 = array($tableau1_1, $tableau1_2);
   tableau2_1 = array($tableau1_3, $tableau1_4) ;

   // Les tableaux 3 sont des tableaux de tableaux de tableaux
   tableau3 = array($tableau2_1, $tableau2_2);
} 
0
je ne peux pas faire comme tu dis vu que je ne connais pas mes données à l'avance.
Mon tableau 1 contient les prénom
le 2 contient les semaine
le 3 devrait contenir les jour
ainsi tableau3[0][0][0] contiendra le premier jour de la premiere semaine du premier prénom.
merci de votre aide
0
Mihawk Messages postés 4315 Date d'inscription mercredi 29 mars 2006 Statut Contributeur Dernière intervention 6 janvier 2015 846
9 févr. 2012 à 14:35
Tu codes en PHP ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
en php oui mais avec fpdf pour faire en pdf :)
0
Mihawk Messages postés 4315 Date d'inscription mercredi 29 mars 2006 Statut Contributeur Dernière intervention 6 janvier 2015 846
9 févr. 2012 à 16:14
Mais tu manipules bien tes tableaux avec PHP ?
0
oui oui je fais des tableaux en php
0
Mihawk Messages postés 4315 Date d'inscription mercredi 29 mars 2006 Statut Contributeur Dernière intervention 6 janvier 2015 846
9 févr. 2012 à 16:58
Alors l'algorithme va dépendre de la manière dont tu récupères tes données...
Il faudrait ta requête en base pour savoir comment les remplir.

0
Voici mon code :)
<?php
require('fpdf.php');
class PDF_MC_Table extends FPDF
{
var $widths;
var $aligns;

function SetWidths($w)
{
    //Tableau des largeurs de colonnes
    $this->widths=$w;
}

function SetAligns($a)
{
    //Tableau des alignements de colonnes
    $this->aligns=$a;
}

function Row($data)
{
    //Calcule la hauteur de la ligne
    $nb=0;
    for($i=0;$i<count($data);$i++)
        $nb=max($nb,$this->NbLines($this->widths[$i],$data[$i]));
    $h=5*$nb;
    //Effectue un saut de page si nécessaire
    $this->CheckPageBreak($h);
    //Dessine les cellules
    for($i=0;$i<count($data);$i++)
    {
        $w=$this->widths[$i];
        $a=isset($this->aligns[$i]) ? $this->aligns[$i] : 'L';
        //Sauve la position courante
        $x=$this->GetX();
        $y=$this->GetY();
        //Dessine le cadre
        $this->Rect($x,$y,$w,$h);
        //Imprime le texte
        $this->MultiCell($w,5,$data[$i],0,$a);
        //Repositionne à droite
        $this->SetXY($x+$w,$y);
    }
    //Va à la ligne
    $this->Ln($h);
}

function CheckPageBreak($h)
{
    //Si la hauteur h provoque un débordement, saut de page manuel
    if($this->GetY()+$h>$this->PageBreakTrigger)
        $this->AddPage($this->CurOrientation);
}

function NbLines($w,$txt)
{
    //Calcule le nombre de lignes qu'occupe un MultiCell de largeur w
    $cw=&$this->CurrentFont['cw'];
    if($w==0)
        $w=$this->w-$this->rMargin-$this->x;
    $wmax=($w-2*$this->cMargin)*1000/$this->FontSize;
    $s=str_replace("\r",'',$txt);
    $nb=strlen($s);
    if($nb>0 and $s[$nb-1]=="\n")
        $nb--;
    $sep=-1;
    $i=0;
    $j=0;
    $l=0;
    $nl=1;
    while($i<$nb)
    {
        $c=$s[$i];
        if($c=="\n")
        {
            $i++;
            $sep=-1;
            $j=$i;
            $l=0;
            $nl++;
            continue;
        }
        if($c==' ')
            $sep=$i;
        $l+=$cw[$c];
        if($l>$wmax)
        {
            if($sep==-1)
            {
                if($i==$j)
                    $i++;
            }
            else
                $i=$sep+1;
            $sep=-1;
            $j=$i;
            $l=0;
            $nl++;
        }
        else
            $i++;
    }
    return $nl;
}
}
		//connection à ma base de données
		$bdd = new PDO('mysql:host=localhost;dbname=recup', 'root', '');
		//sélectionne tous les steward pour remplir la liste déroulante
		
		if(isset($_POST['steward']) and isset($_POST['semainedebut']) and isset($_POST['semainefin']) and isset($_POST['enregistrer']))
		{
			//si tous les steward coché
			if($_POST['steward'] == "tous")
			{
				//$x_travail = array();
				$steward = $bdd->query('select * from steward where visible = "oui" order by prenom ASC') ;
				$steward->execute() ;
				$nbr_prenom = 0 ;
				$nbr_semaine = ($_POST['semainefin'] - $_POST['semainedebut'])+1 ;
				while ($donneessteward = $steward->fetch())
				{
					$st = $donneessteward['table'] ;
					$requete = $bdd->prepare('select * from '.$st.' where semaine between :semainedebut and :semainefin and annee = :annee order by semaine ') ;
					$requete->execute(array(
					':semainedebut'=>$_POST['semainedebut'],
					':semainefin'=>$_POST['semainefin'],
					':annee'=>$_POST['annee']
					));
					$ouiounon = $requete->rowCount() ;
					if($ouiounon > 0)
					{
					$nbr_prenom++;
					$prenom[] = $donneessteward['prenom'] ;
					$comp = $bdd->prepare('select * from compteur where id_steward = :id');
					$comp->execute(array(':id'=>$donneessteward['id']));
					$recucompteur = $comp->fetch();
					
					$compteur[] = $recucompteur['recuperation'] ;
					}
					while($horaire = $requete->fetch())
					{
						//je split sur les ; pour récupérer toutes mes valeurs, la valeur [3] est "autre" je split sur le = pour avoir par exemple "maladie=heure" donc en [0] maladie et en [1] heure
						$lundi = explode(";", $horaire['lundi']);
						$autrelundi = explode("=", $lundi[3]) ;	
						$mardi = explode(";", $horaire['mardi']);
						$autremardi = explode("=", $mardi[3]) ;	
						$mercredi = explode(";", $horaire['mercredi']);
						$autremercredi = explode("=", $mercredi[3]) ;	
						$jeudi = explode(";", $horaire['jeudi']);
						$autrejeudi = explode("=", $jeudi[3]) ;	
						$vendredi = explode(";", $horaire['vendredi']);
						$autrevendredi = explode("=", $vendredi[3]) ;	
						$samedi = explode(";", $horaire['samedi']);
						$autresamedi = explode("=", $samedi[3]) ;	
						$dimanche = explode(";", $horaire['dimanche']);
						$autredimanche = explode("=", $dimanche[3]) ;	
						//si = "" on a pas de commentaire
						if($lundi[4] == "")
						{
							$commentairelundi = "&nbsp;" ;
						}
						else
						{
							$commentairelundi = $lundi[4] ;
						}
						if($lundi[0] == "")
						{
							$lundis = "&nbsp;" ;
						}
						else
						{
							$lundis = $lundi[0] ;
						}
						if($autrelundi[1] == "")
						{
							$autreslundi = "&nbsp;" ;
						}
						else
						{
							$autreslundi = $autrelundi[1] ;
						}	
						if($mardi[0] == "")
						{
							$mardis = "&nbsp;" ;
						}
						else
						{
							$mardis = $mardi[0] ;
						}
						if($autremardi[1] == "")
						{
							$autresmardi = "&nbsp;" ;
						}
						else
						{
							$autresmardi = $autremardi[1] ;
						}	
						if($mercredi[0] == "")
						{
							$mercredis = "&nbsp;" ;
						}
						else
						{
							$mercredis = $mercredi[0] ;
						}
						if($autremercredi[1] == "")
						{
							$autresmercredi = "&nbsp;" ;
						}
						else
						{
							$autresmercredi = $autremercredi[1] ;
						}	
						if($jeudi[0] == "")
						{
							$jeudis = "&nbsp;" ;
						}
						else
						{
							$jeudis = $jeudi[0] ;
						}
						if($autrejeudi[1] == "")
						{
							$autresjeudi = "&nbsp;" ;
						}
						else
						{
							$autresjeudi = $autrejeudi[1] ;
						}	
						if($vendredi[0] == "")
						{
							$vendredis = "&nbsp;" ;
						}
						else
						{
							$vendredis = $vendredi[0] ;
						}
						if($autrevendredi[1] == "")
						{
							$autresvendredi = "&nbsp;" ;
						}
						else
						{
							$autresvendredi = $autrevendredi[1] ;
						}	
						if($samedi[0] == "")
						{
							$samedis = "&nbsp;" ;
						}
						else
						{
							$samedis = $samedi[0] ;
						}
						if($autresamedi[1] == "")
						{
							$autressamedi = "&nbsp;" ;
						}
						else
						{
							$autressamedi = $autresamedi[1] ;
						}
						if($dimanche[0] == "")
						{
							$dimanches = "&nbsp;" ;
						}
						else
						{
							$dimanches = $dimanche[0] ;
						}
						if($autredimanche[1] == "")
						{
							$autresdimanche = "&nbsp;" ;
						}
						else
						{
							$autresdimanche = $autredimanche[1] ;
						}													
						if($mardi[4] == "")
						{
							$commentairemardi = "&nbsp;" ;
						}
						else
						{
							$commentairemardi = $mardi[4] ;
						}	
						if($mercredi[4] == "")
						{
							$commentairemercredi = "&nbsp;" ;
						}
						else
						{
							$commentairemercredi = $mercredi[4] ;
						}	
						if($jeudi[4] == "")
						{
							$commentairejeudi = "&nbsp;" ;
						}
						else
						{
							$commentairejeudi = $jeudi[4] ;
						}		
						if($vendredi[4] == "")
						{
							$commentairevendredi = "&nbsp;" ;
						}
						else
						{
							$commentairevendredi = $vendredi[4] ;
						}	
						if($samedi[4] == "")
						{
							$commentairesamedi = "&nbsp;" ;
						}
						else
						{
							$commentairesamedi = $samedi[4] ;
						}	
						if($dimanche[4] == "")
						{
							$commentairedimanche = "&nbsp;" ;
						}
						else
						{
							$commentairedimanche = $dimanche[4] ;
						}						
						//pause
						if($lundi[1] == "1")
						{
							$p1lundi = "oui";
						}
						else
						{
							$p1lundi = "non";
						}
						if($lundi[2] == "1")
						{
							$p2lundi = "oui";
						}
						else
						{
							$p2lundi = "non";
						}					
						if($mardi[1] == "1")
						{
							$p1mardi = "oui";
						}
						else
						{
							$p1mardi = "non";
						}
						if($mardi[2] == "1")
						{
							$p2mardi = "oui";
						}
						else
						{
							$p2mardi = "non";
						}
					
						if($mercredi[1] == "1")
						{
							$p1mercredi = "oui";
						}
						else
						{
							$p1mercredi = "non";
						}
						if($mercredi[2] == "1")
						{
							$p2mercredi = "oui";
						}
						else
						{
							$p2mercredi = "non";
						}	
	
						if($jeudi[1] == "1")
						{
							$p1jeudi = "oui";
						}
						else
						{
							$p1jeudi = "non";
						}
						if($jeudi[2] == "1")
						{
							$p2jeudi = "oui";
						}
						else
						{
							$p2jeudi = "non";
						}	
	
						if($vendredi[1] == "1")
						{
							$p1vendredi = "oui";
						}
						else
						{
							$p1vendredi = "non";
						}
						if($vendredi[2] == "1")
						{
							$p2vendredi = "oui";
						}
						else
						{
							$p2vendredi = "non";
						}	
										
						if($samedi[1] == "1")
						{
							$p1samedi = "oui";
						}
						else
						{
							$p1samedi = "non";
						}
						if($samedi[2] == "1")
						{
							$p2samedi = "oui";
						}
						else
						{
							$p2samedi = "non";
						}
						
						if($dimanche[1] == "1")
						{
							$p1dimanche = "oui";
						}
						else
						{
							$p1dimanche = "non";
						}
						if($dimanche[2] == "1")
						{
							$p2dimanche = "oui";
						}
						else
						{
							$p2dimanche = "non";
						}	
								
						
					$heures = $horaire['recup'] % 60 ;
					$heure = ($horaire['recup'] - $heures) / 60 ;
					if($horaire['hp'] != "")
					{
						$hptab = explode(";",$horaire['hp']) ;
						$hplmin = $hptab[0] % 60 ;
						$hplh = ($hptab[0] - $hplmin) / 60 ;
						if($hplmin < 10)
						{ 
							$hplmin = "0".$hplmin ;
						}
						else
						{
							$hplmin = $hplmin ;
						}
						$hpmamin = $hptab[1] % 60 ;
						$hpmah = ($hptab[1] - $hpmamin) / 60 ;	
						if($hpmamin < 10)
						{ 
							$hpmamin = "0".$hpmamin ;
						}
						else
						{
							$hpmamin = $hpmamin ;
						}
						$hpmmin = $hptab[2] % 60 ;
						$hpmh = ($hptab[2] - $hpmmin) / 60 ;
						if($hpmmin < 10)
						{ 
							$hpmmin = "0".$hpmmin ;
						}
						else
						{
							$hpmmin = $hpmmin ;
						}					
						$hpjmin = $hptab[3] % 60 ;
						$hpjh = ($hptab[3] - $hpjmin) / 60 ;
						if($hpjmin < 10)
						{ 
							$hpjmin = "0".$hpjmin ;
						}
						else
						{
							$hpjmin = $hpjmin ;
						}					
						$hpvmin = $hptab[4] % 60 ;
						$hpvh = ($hptab[4] - $hpvmin) / 60 ;
						if($hpvmin < 10)
						{ 
							$hpvmin = "0".$hpvmin ;
						}
						else
						{
							$hpvmin = $hpvmin ;
						}					
						$hpsmin = $hptab[5] % 60 ;
						$hpsh = ($hptab[5] - $hpsmin) / 60 ;
						if($hpsmin < 10)
						{ 
							$hpsmin = "0".$hpsmin ;
						}
						else
						{
							$hpsmin = $hpsmin ;
						}					
						$hpdmin = $hptab[6] % 60 ;
						$hpdh = ($hptab[6] - $hpdmin) / 60 ;		
						if($hpdmin < 10)
						{ 
							$hpdmin = "0".$hpdmin ;
						}
						else
						{
							$hpdmin = $hpdmin ;
						}		
					}
					else
					{
						$hplh = "0" ;
						$hplmin = "00" ;
						$hpmah = "0" ;
						$hpmamin = "00" ;
						$hpmh = "0" ;
						$hpmmin = "00" ;
						$hpjh = "0" ;
						$hpjmin = "00" ;
						$hpvh = "0" ;
						$hpvmin = "00" ;
						$hpsh = "0" ;
						$hpsmin = "00" ;
						$hpdh = "0" ;
						$hpdmin = "00" ;						
					}
					
$day = 1;
while ($horaire['semaine'] != date("W", mktime(1 , 1, 1, 1 , $day, $horaire['annee'])) && $day < 366)
{
$day = $day + 7;
}
if ($day >= 366)
{
die('Erreur, week non trouvé');
}
// à partir d'ici tu connais au moins un jour de la semaine : date('ce que tu veux comme données', mktime(1 , 1, 1, 1 , $day, $_GET['Year']))
// pour avoir lundi, on prend le numero de la semaine de la date que nous avons trouvé et on la soustrait à ce que nous avons +1 sinon nous
// avons trouvé le dimanche de la semaine précédente
$day = $day - date('N', mktime(1 , 1, 1, 1 , $day, $horaire['annee'])) +1;
// à partir d'ici, pour avoir la date du lundi :
//pour avoir mardi, tu fais $day + 1
$semaine[] = "Semaine du ".date('d/m/Y', mktime(1 , 1, 1, 1 , $day, $horaire['annee']))." au ".date('d/m/Y', mktime(1 , 1, 1, 1 , $day+6, $horaire['annee']))."" ;
$travail_semaine = array($lundis,$mardis,$mercredis,$jeudis,$vendredis,$samedis,$dimanches) ;
$travail[] = $travail_semaine ;
$pause1_semaine = array($p1lundi,$p1mardi,$p1mercredi,$p1jeudi,$p1vendredi,$p1samedi,$p1dimanche) ;
$pause2_semaine = array($p2lundi,$p2mardi,$p2mercredi,$p2jeudi,$p2vendredi,$p2samedi,$p2dimanche) ;
$pause1[] = $pause1_semaine ;
$pause2[] = $pause2_semaine ;
$type_semaine = array($autrelundi[0],$autremardi[0],$autremercredi[0],$autrejeudi[0],$autrevendredi[0],$autresamedi[0],$autredimanche[0]) ;
$type[] = $type_semaine;
$heuretype_semaine = array($autreslundi,$autresmardi,$autresmercredi,$autresjeudi,$autresvendredi,$autressamedi,$autresdimanche) ;
$heuretype[] = $heuretype_semaine;
$commentaire_semaine = array($commentairelundi,$commentairemardi,$commentairemercredi,$commentairejeudi,$commentairevendredi,$commentairesamedi,$commentairedimanche) ;
$commentaire[] = $commentaire_semaine;
$heureprestee_semaine = array($hplh."h".$hplmin,$hpmah."h".$hpmamin,$hpmh."h".$hpmmin,$hpjh."h".$hpjmin,$hpvh."h".$hpvmin,$hpsh."h".$hpsmin,$hpdh."h".$hpdmin);
$heureprestee[] = $heureprestee_semaine ;
$heuresemaine[] = $heure." heure(s) et ".$heures." minute(s)" ;
					}
//$x_travail = $travail[] ;				
				}
			}
		}
$jour = array("Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi","Dimanche");		
$pdf=new PDF_MC_Table();
$pdf->AddPage();
for($x=0;$x<$nbr_prenom;$x++)
{   
 $pdf->SetFont('Arial','B',10);
	$pdf->Cell(10,10,'Prénom : '.$prenom[$x].'                                                    Compteur : '.$compteur[$x].'');
	 $pdf->Ln(10);

	 for($y=0;$y<$nbr_semaine;$y++)
	{
		 $pdf->SetFont('Arial','B',8);
		$pdf->Cell(10,10,''.$semaine[$y].'');
		$pdf->Ln(10);
		 
		//Table de 20 lignes et 4 colonnes
		$pdf->SetWidths(array(20,30,15,15,22,25,30,25));
		//srand(microtime()*1000000);
		//for($i=0;$i<20;$i++)
		//voir pour la couleur d'entete

			$pdf->Row(array("Jour","Travail","Pause 1","Pause 2",
			"Type","Heure type","Commentaire","Heures prestées"));
			$pdf->SetFont('Arial','',8);	
		for($i = 0; $i < 8 ;$i++)
		{
			if($i < 7)
			{
		/* 		if($x_travail[$x][$y][$i] == "&nbsp;")
				{
					$x_travail[$x][$y][$i] = " ";
				}
				else
				{
					$x_travail[$x][$y][$i] = $travail[$x][$y][$i] ;
				} */
				if($type[$y][$i] == "rien")
				{
					$type[$y][$i] = "Travail";
				}
				else
				{
					$type[$y][$i] = $type[$y][$i] ;
				}
				if($heuretype[$y][$i] == "&nbsp;")
				{
					$heuretype[$y][$i] = " ";
				}
				else
				{
					$heuretype[$y][$i] = $heuretype[$y][$i] ;
				}	
				if($commentaire[$y][$i] == "&nbsp;")
				{
					$commentaire[$y][$i] = " ";
				}
				else
				{
					$commentaire[$y][$i] = $commentaire[$y][$i] ;
				}				
				$pdf->Row(array($jour[$i],$travail[$y][$i],$pause1[$y][$i],$pause2[$y][$i],$type[$y][$i],$heuretype[$y][$i],$commentaire[$y][$i],$heureprestee[$y][$i]));
			}
			else
			{
				$pdf->SetFont('Arial','B',8);
				$pdf->SetWidths(array(102,80));
				$pdf->Row(array("Heures de récupération pour cette semaine",$heuresemaine[$y]));
			}
		}
	}
	$pdf->AddPage();
}	

$pdf->Output();?>
0
Mihawk Messages postés 4315 Date d'inscription mercredi 29 mars 2006 Statut Contributeur Dernière intervention 6 janvier 2015 846
10 févr. 2012 à 11:24
Powaaaa, mangez ça !! :D
0
Mihawk Messages postés 4315 Date d'inscription mercredi 29 mars 2006 Statut Contributeur Dernière intervention 6 janvier 2015 846
10 févr. 2012 à 11:31
Ta requête juste ta requête !!
0
effectivement ca fait mal comme code lol, la partie importante est :
$travail_semaine = array($lundis,$mardis,$mercredis,$jeudis,$vendredis,$samedis,$dimanches) ;
$travail[] = $travail_semaine ;

le tout est dans un while et se rempli dynamiquement, ce que je voudrais c'est qu'a la sortie de mon while (qui lui aussi est dans un autre while) un troisieme tableau se remplisse dynamiqueement avec mon tableau $travail[] à deux dimension

merci
0