Modélisation Base de donnée

ViPHP
ViPHP | 3607 Messages

04 oct. 2008, 15:58

Bon alors concernant la limitation des résultats..., je suis en train de plancher de ce côté: http://www.phpfrance.com/forums/voir_sujet-243382.php
Je suis en train de mettre en place la solution de la table intermédiare... Bref, là n'est plus le problème (ou en tout cas plus dans ce sujet ;) )
Je reviens parce que j'ai un petit soucis...
voici à quoi ressemble mon script maintenant:
//tri des résultats
$event = Array();

//si il y a des résultats
if (is_array($events) && count($events)>0)
{
  //début des id event  
  foreach($events as $id=>$idArray)
  {
    //début des années du même id event
    $event[$id]='';
    $a=0;
    foreach($idArray as $annee=>$anneesArray)
    {
        //début des mois de la même année
        $m=0;
        foreach($anneesArray as $mois=>$moisArray)
        {
            //début des jours du même mois
	    
	    //Détermine si il y a une ou plusieurs dates
		$article=count($moisArray)<=1?"le ":"les ";
            $j=0;
            foreach($moisArray as $jour=>$dataEvent)
            {
		//si on est sur une date "plage" changement de l'article et ajout de la date de fin
		if($dataEvent[0]['datef']!=='0000-00-00 00:00:00' && $j==0){
			$article="du ";
			$fin=" au ".date('j', strtotime($dataEvent[0]['datef']));
			
		} elseif($j>0) {
			$article='';
			$fin='';
		}
                $event[$id].= $article . $jour.$fin. ($j<count($moisArray)-2?", ":" et "); //+ remplace dernier "," par "et"
                $j++;
            }
            //fin des jours du même mois
            $event[$id] = preg_replace('#(et)\s?$#i', ' ', $event[$id]); //+ remplace dernier "et" par " "
            $event[$id] .= $mois_fr[$mois] . ($m<count($anneesArray)-2?", ":" et "); //+ remplace dernier "," par "et"
            $m++;
        }
        //fin des mois de la même année
        $event[$id] = preg_replace('#(et)\s?$#i', ' ', $event[$id]); //+ remplace dernier "et" par " "
        $event[$id] .= $annee. ($a<count($idArray)-2?", ":" et "); //+ remplace dernier "," par "et"
        $a++;
    }
    //fin des années pour le même id
	$event[$id] = preg_replace('#(et)\s?$#i', ' ', $event[$id]); //+ remplace dernier "et" par " "
	$event[$id].= ': <i>'.$dataEvent[0]['descri'].'</i>, '.$dataEvent[0]['ville'].' ('.$dataEvent[0]['cp'].')';
	$event[$id]=ucfirst($event[$id]);
  }
  
  //fin des id event
}
le problème se situe içi:
foreach($moisArray as $jour=>$dataEvent)
            {
		//si on est sur une date "plage" changement de l'article et ajout de la date de fin
		if($dataEvent[0]['datef']!=='0000-00-00 00:00:00' && $j==0){
			$article="du ";
			$fin=" au ".date('j', strtotime($dataEvent[0]['datef']));
			
		} elseif($j>0) {
			$article='';
			$fin='';
		}
                $event[$id].= $article . $jour.$fin. ($j<count($moisArray)-2?", ":" et "); //+ remplace dernier "," par "et"
                $j++;
            }
en fait lorsqu'un évènement possède une date de fin remplie, je souhaite marquer du tant au tant...
Mais ça se complique lorsque les deux dates ont des mois différents, voir des années différentes...
Et je ne vois pas du tout comment implanter une méthode similaire à ton idée, sur ce deuxième champ, afin de gérer l'affichage au mieux....

ViPHP
ViPHP | 3607 Messages

05 oct. 2008, 15:47

Bon ben ça y est j'ai résolu mon problème, c'est pas vraiment très joli joli, mais ça donne ça:
 foreach($moisArray as $jour=>$dataEvent)
            {
		//si on est sur une date "plage" changement de l'article et ajout de la date de fin
		if($dataEvent[0]['datef']!=='0000-00-00 00:00:00'){
			$jourfin=(int)date('j', strtotime($dataEvent[0]['datef']));
			$moisfin=(int)date('m', strtotime($dataEvent[0]['datef']));
			$anneefin=(int)date('Y', strtotime($dataEvent[0]['datef']));
			$event[$id].='du '.$jour;
			if($moisfin!=$mois || $annee!=$anneefin){
				$event[$id].=' '.$mois_fr[$mois];
			}
			if($annee!=$anneefin){
				$event[$id].=' '.$annee;
			}
			$event[$id].=" au ".$jourfin.' '.$mois_fr[$moisfin].' '.$anneefin;
			break 3;
		} else {
			$event[$id].= $article . $jour. ($j<count($moisArray)-2?", ":" et "); //+ reemplace dernier "," par "et"
		}
		$j++;
            }
c'est le break qui me plait pas trop, mais bon ça fonctionne bien, donc je touche plus jusqu'a nouvel ordre!
Merci encore pour toute l'aide apportée!!!!!
D'un grand secours!