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

PHP & Base de données Discussion :

détécté les intersection entre 2 timeline ? [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2015
    Messages : 12
    Points : 6
    Points
    6
    Par défaut détécté les intersection entre 2 timeline ?
    Bonjour à tous,
    je cherche à créé un petit script pour détecter une intersection entre 2 timeline exemple :

    14:00 -17:00
    16-00 18:00

    est ce qu'il y aurait moyen de faire un script simple pour l'occasion ?
    merci d'avance !

  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
    Points : 44 155
    Points
    44 155
    Par défaut
    Ce seront toujours des heures piles ?

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2015
    Messages : 12
    Points : 6
    Points
    6
    Par défaut
    je pensais pas qu'on me répondrais si rapidement !


    Ce seront toujours des heures piles ?
    ca peut etre n'importe qu'elle heure au format hh:mm

    voici ce que j'ai... le problème c que lorsque ca dépasse 2 sélection ... ça ne fonction plus très bien...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    for($i=0 ;  $i < count($affecter)  ; $i++ ){ 
    	for($j=0 ;  $j < count($affecter)  ; $j++ ){
    		if( isset($h_out_aff[$j+1]) && isset($h_out_aff[$i+1]) ){
    			if($h_in_aff[$i] <= $h_out_aff[$j+1] && $h_in_aff[$i+1] <= $h_out_aff[$j] ){
    				$valide = false;
    			}
    		}
    	}
    }

  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
    Points : 44 155
    Points
    44 155
    Par défaut
    L'intersection c'est le plus grand début et la petite fin :
    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
    <?php
    $t1 = 1400;
    $t2 = 1700;
    $t3 = 1800;
    $t4 = 1900;
     
    $intersect_debut = max($t1, $t3);
    $intersect_fin = min($t2, $t4);
     
    if ($intersect_debut < $interect_fin) {
    	echo $intersect_debut . " - " . $intersect_fin;
    }
    else {
    	echo 'pas d\'intersection';
    }

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2015
    Messages : 12
    Points : 6
    Points
    6
    Par défaut
    si il y en a plusieurs je fait pareil ?

    parce que je récupére ces éléments dans un formulaire... et la personne peux en sélectionner plusieurs mais il ne faut pas qu'il y est une intersection entre l'un d'entre eux..

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2015
    Messages : 12
    Points : 6
    Points
    6
    Par défaut
    du coup j'ai fait comme ca pour tous les prendre en conte, mais fait pas le resultat attendu :/
    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
    $t1 = null;
    $t2 = null;
    $t3 = null;
    $t4 = null;
    for($i=0 ;  $i < sizeof($affecter)  ; $i++ ){ 
    	for($j=0 ;  $j < sizeof($affecter)  ; $j++ ){
    		$t1 = strtotime($in[$i]) ;
    		$t2 = strtotime($out[$i]);	
    		$t3 = strtotime( $in[$j]);
    		$t4 = strtotime($out[$j]);
    		$intersection_in = max($t1,$t3);
    		$intersection_out = max($t2,$t4);
    		if($intersection_in < $intersection_out ){
    			echo $intersection_in." - ".$intersection_out ;
    			echo "<br/> intersection ***";
    		}else {
    			echo 'pas d\'intersection';
    		}
    	}
    }

  7. #7
    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
    Points : 44 155
    Points
    44 155
    Par défaut
    Si tu veux seulement voir si les plages se coupent :

    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
    <?php
    $plage[] = array('in'=>1400, 'out'=>1900);
    $plage[] = array('in'=>1800, 'out'=>2000);
    $plage[] = array('in'=>1900, 'out'=>2200);
     
    $n = count($plage);
     
    for($i=0 ;  $i < $n  ; $i++ ){ 
    	for($j=0 ;  $j < $n  ; $j++ ){
    		if ($i != $j) {
    			if ($plage[$i]['in'] <= $plage[$j]['out'] && $plage[$i]['out'] >= $plage[$j]['in']) {
    				echo $plage[$i]['in'] . '-' . $plage[$i]['out'] . ' coupe ' . $plage[$j]['in'] . '-' . $plage[$j]['out'] . '<br/>';
    				break(2);
    			}
    		}
    	}
    }
    Tel quel si une plage fini à la même heure qu'une plage commence, elles sont considérées comme communes.
    A toi de voir le comportement que tu veux.

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2015
    Messages : 12
    Points : 6
    Points
    6
    Par défaut
    j'ai adapté a ce que je veux faire mais apparemment la condition ne passe pas

    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
    foreach($affecter as $aff){ // je met les donné dans un tableau multi dimension pour pouvoir les comparé plus tard
            //.......
            $plage[] = array( 'in' => $h_in_aff,  'out'=> $h_out_aff );    
    }
    // $plage est un tableau multi dimension 	
    $n = count($plage);
    for($i=0 ;  $i < $n  ; $i++ ){ 
    	for($j=0 ;  $j < $n  ; $j++ ){
    		if ($i != $j) {
    			if ($plage[$i]['in'] <= $plage[$j]['out'] && $plage[$i]['out'] >= $plage[$j]['in']) {
    				echo $plage[$i]['in'] . '-' . $plage[$i]['out'] . ' coupe ' . $plage[$j]['in'] . '-' . $plage[$j]['out'] . '<br/>';
    				break(2);
    			}
    		}
    	}
    }

  9. #9
    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
    Points : 44 155
    Points
    44 155
    Par défaut
    Il sort d'ou $h_in_aff ?

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2015
    Messages : 12
    Points : 6
    Points
    6
    Par défaut
    entait c un tableau qui récupére les valeur pour les mettres dans le tableau multi dimension :/ car les valeurs sont récupéré dans une liste ....

  11. #11
    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
    Points : 44 155
    Points
    44 155
    Par défaut
    je n'ai pas mieux compris

    comment est structuré $affecter ?

  12. #12
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2015
    Messages : 12
    Points : 6
    Points
    6
    Par défaut
    lol dsl, ho purée!
    en réexpliquant j'ai compris d'où venais l'erreur

    En faite j'ai juste oublier de retiré les crochés ha $h_in_aff[] et $h_out_aff[] qui son des variable qui me permet de récupéré les valeur contenu dans mon formulaire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    foreach($affecter as $aff){
    	// $h_in et h_out récupère les valeurs des listes a chaque tour de boucle... 12:15 - 14:30
    	$h_in_aff = strtotime($h_in) ;
    	$h_out_aff = strtotime($h_out) ;			
    	$plage[] = array('in'=>$h_in_aff, 'out'=>$h_out_aff);
    	$cumule +=  ( strtotime($h_out) - strtotime($h_in) ) / 3600 ;
    	$tache_list .= "  ".$aff.' ['.$h_in.' - '.$h_out.'],'; //constitution du message infos dans un array pour créer un message de validation
    }
    et ca marche !

  13. #13
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2015
    Messages : 12
    Points : 6
    Points
    6
    Par défaut
    merci pour votre aide !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Calcul des surfaces d'intersections entre les cercles
    Par Midou45 dans le forum Mathématiques
    Réponses: 6
    Dernier message: 14/03/2012, 10h21
  2. Réponses: 8
    Dernier message: 28/12/2011, 18h09
  3. Réponses: 7
    Dernier message: 19/06/2008, 15h18
  4. [Relations] afficher les relations entre 2 tables
    Par dzincou dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 14/01/2004, 17h07
  5. Réponses: 6
    Dernier message: 23/12/2003, 15h30

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