Comparer 2 colonnes se trouvant dans 2 lignes différentes

Eléphanteau du PHP | 11 Messages

18 avr. 2010, 18:31

Pardon, le code indiqué fonctionne imparfaitement car s'il affiche bien les numéros de cours qui chevauchent et la date sans erreur. Ce n'est pas le cas pour les horaires de fin de cours.
Le code mentionne l'heure de fin de cours d'une même clé. A savoir :
cours n°4 date : 14/04/2010 début cours :15h fin cours : 17h.
Ces horaires correspondent effectivement à la clé cours n°4.

devlop78
Invité n'ayant pas de compte PHPfrance

18 avr. 2010, 18:38

1) C'est ma logique ... tu compares la fin de la dernière ligne avec le début de la première. C'est cette technique qui m'est venue en premier à l'esprit.
2) Ce n'est pas grave. C'est une Notice, ça n'empêche en rien au code de fonctionner. C'est juste parce que pour le 1er passage de boucle, la deuxième variable n'existe pas encore. Donc soit tu modifies les propriétés de ton serveur, soit tu mets à la place de

Code : Tout sélectionner

foreach($tableau_Cours as $maCle=>$maValeur) { $debut_Cours = $maValeur[0]; if ($debut_Cours < $fin_Cours) echo "<tr><td>".$maCle."</td><td>".strftime("%d/%m/%Y",$maValeur[0])."</td><td>".strftime("%H h",$maValeur[0])."</td><td>".strftime("%H h",$maValeur[1])."</td></tr>"; $fin_Cours = $maValeur[1]; }

Ca :

Code : Tout sélectionner

foreach($tableau_Cours as $maCle=>$maValeur) { $debut_Cours = $maValeur[0]; if (isset($debut_Cours) && isset($fin_Cours)) { if ($debut_Cours < $fin_Cours) echo "<tr><td>".$maCle."</td><td>".strftime("%d/%m/%Y",$maValeur[0])."</td><td>".strftime("%H h",$maValeur[0])."</td><td>".strftime("%H h",$maValeur[1])."</td></tr>"; $fin_Cours = $maValeur[1]; } }

Eléphanteau du PHP | 11 Messages

18 avr. 2010, 18:55

ok mais j'ai toujours le problème de la comparaison des horaires. Comment puis je accéder à la ligne du dessus de la colonne fin de cours et insérer cela dans l'instruction echo

devlop78
Invité n'ayant pas de compte PHPfrance

18 avr. 2010, 19:01

Euh ... c'est quoi le problème 8-|

Peux-tu remettre ton code en entier stp (pour que je puisse le tester chez moi) et expliquer le problème réel (il me semblait que la solution était trouvée ...)

Eléphanteau du PHP | 11 Messages

18 avr. 2010, 19:09

Outre le n° de cours et la date (qui fonctionne bien), je veux afficher dans 2 autres colonnes et respectivement l'heure de la fin du cours et l'heure du début du cours suivant. Donc l'heure de fin de cours si situe dans la colonne [1] mais sur la ligne du dessus et le début du cours sur la colonne [0] de la ligne du dessous.
Le problème est d'afficher dans la commande echo, l'heure de la fin du cours de la ligne qui précède début de cours.

Je te mets le code complet :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Agenda php</title>
</head>

<body style="background-color:#B7C1A2";>
<h2 style="color:blue;">Un agenda en php</h2>
<p>Il a été résolu le probème ,du moins nous l'espérons, en utilisant les tableaux de façon différente :
<ol>
   <li>tableau indicié</li>
   <li>tableau associatif à plusieurs colonnes</li>
</ol>
</p>

<h3 style="color:blue";> Avec le tableau indicié</h3>
<?php
$numCours = array(8, 5, 4, 1, 3, 2, 6, 7, 9);
$debutCours = array(mktime(14,0,0,04,14,2010), mktime(14,0,0,04,12,2010), mktime(16,0,0,04,13,2010),mktime(8,0,0,04,16,2010), mktime(15,0,0,04,14,2010), mktime(16,0,0,04,15,2010), mktime(9,0,0,04,16,2010), mktime(14,0,0,04,16,2010), mktime(14,0,0,04,15,2010));
$finCours = array(mktime(12,0,0,04,16,2010), mktime(16,0,0,04,12,2010), mktime(18,0,0,04,13,2010), mktime(16,0,0,04,14,2010), mktime(17,0,0,04,14,2010), mktime(16,0,0,04,15,2010), mktime(18,0,0,04,15,2010), mktime(16,0,0,04,16,2010), mktime(11,0,0,04,16,2010));

//La fonction array_multisort ne fonctionnant pas, j'ai utilise la focntion sort()
sort($numCours);
sort($debutCours);
sort($finCours);


echo "<table width=80% border=1 bordercolor=blue>
  <tr><th>Date des Cours</th><th>Horaires des cours</th><th><small>
  Les chevauchements</th><tr><td>"; 
  
//tableau 1
   echo "<table border=1 align=center>
     <tr><th>Cours</th><th>Date</th></tr>";
        foreach($numCours as $maCle=>$maValeur)
        {
           echo "<tr><td align=center>".$maValeur."</td><td>".strftime("%d/%m/%Y",$debutCours[$maCle])."</td></tr>";
        }
         echo "</table></td><td>";
		 
//tableau 2
   echo "<table border=1 align=center>
     <tr><th>Début du cours</th><th>Fin du cours</th></tr>";
        foreach($debutCours as $maCle=>$maValeur)
        {
        echo "<tr><td align=center>".strftime("%H h",$debutCours[$maCle])."</td><td align=center>".strftime("%H h",$finCours[$maCle])."</td></tr>";
        }
        echo "</table></td><td>";


//tableau diff
echo "<table border=1 bordercolor=green align=center>
    <tr><th>Cours</th>
    <th>Date</th>
	<th>Fin cours précédent </th>
	<th>Debut cours suivant</th></tr>";
 foreach($debutCours as $maCle=>$maValeur)
    {
       if ($numCours and $debutCours[$maCle] < (@$finCours[$maCle-1]))
	   {
	     
		  echo "<tr><td align=center>".$maCle."</td><td align=center>".strftime("%d/%m/%Y",$debutCours[$maCle])."</td><td align=center>".strftime("%H h",$finCours[$maCle-1])."</td><td align=center>".strftime("%H h",$debutCours[$maCle])."</td></tr>";
       }
   
   }
echo "</table></table>";
?>

<!---------------------------------------------------------------------------------------------------------------->
<br />
<br />
<h3 style="color:blue;">Avec un tableau associatif à plusieurs colonnes</h3>

<p>Nous pouvons faire cela, on utilisant un tableau associatif à plusieurs colonnes. Pour trier un tableau associatif, on utilise la fonction ksort() si l'on souhaite maintenir la correspondance entre les clés et les valeurs. Avec asort(), cette correspondance n'est pas respectée. Faites l'essai!!!</p>

<?php

$tableau_Cours=array();
$tableau_Cours['Cours_005']=array (mktime(14,0,0,04,15,2010), mktime(16,0,0,04,15,2010));
$tableau_Cours['Cours_003']=array (mktime(14,0,0,04,14,2010), mktime(16,0,0,04,14,2010));
$tableau_Cours['Cours_001']=array (mktime(14,0,0,04,12,2010), mktime(16,0,0,04,12,2010));
$tableau_Cours['Cours_002']=array (mktime(16,0,0,04,13,2010), mktime(18,0,0,04,13,2010));
$tableau_Cours['Cours_004']=array (mktime(15,0,0,04,14,2010), mktime(17,0,0,04,14,2010));
$tableau_Cours['Cours_008']=array (mktime(9,0,0,04,16,2010), mktime(12,0,0,04,16,2010));
$tableau_Cours['Cours_006']=array (mktime(16,0,0,04,15,2010), mktime(18,0,0,04,15,2010));
$tableau_Cours['Cours_007']=array (mktime(8,0,0,04,16,2010), mktime(11,0,0,04,16,2010));
$tableau_Cours['Cours_009']=array (mktime(14,0,0,04,16,2010), mktime(16,0,0,04,16,2010));

//ksort trie le tableau suivant les clés en maintenant la correspondance entre les clés et les valeurs. Cette fonction est importante pour les tableaux associatifs
ksort($tableau_Cours);


echo "<table width=80% border=1 bordercolor=blue>
  <tr><th>Date des Cours</th><th>
  Les chevauchements</th><tr><td>";

//tableau 1
   echo "<table border=1 align=center>
     <tr><th>Cours</th><th>Date des cours</th><th>Début du cours</th><th>Fin du cours</th></tr>";
           foreach($tableau_Cours as $maCle=>$maValeur)
        {
            echo "<tr><td align=center>".$maCle."</td><td align=center>".strftime("%d/%m/%Y",$maValeur[0])."</td><td align=center>".strftime("%H h",$maValeur[0])."</td><td align=center>".strftime("%H h",$maValeur[1])."</td></tr>";
        }
         echo "</table></td><td>";
		 
//Tableau diff
   echo "<table border=1 bordercolor=green align=center>
    <tr><th>Cours</th>
    <th>Date</th>
	<th>Fin cours précédent </th>
	<th>Debut cours suivant</th></tr>";
	

 foreach($tableau_Cours as $maCle=>$maValeur)
    {
	   $debut_Cours = $maValeur[0];
          if ($debut_Cours < (@$fin_Cours))
		  echo "<tr><td align=center>".$maCle."</td><td align=center>".strftime("%d/%m/%Y",$maValeur[0])."</td><td align=center>".strftime("%H h",$maValeur[1])."</td><td align=center>".strftime("%H h",$maValeur[0])."</td></tr>";
		  $fin_Cours = $maValeur[1];
	}
	    
echo "</table></table>";
 
  
?>
</body>
</html>
Et merci encore pour ta patience car je ne vois pas comment accéder à cette ligne.

devlop78
Invité n'ayant pas de compte PHPfrance

18 avr. 2010, 19:17

Je crois savoir d'où ça vient ... c'est pas les mêmes données qui sont comparées et affichées.

devlop78
Invité n'ayant pas de compte PHPfrance

18 avr. 2010, 19:20

Cadeau

Code : Tout sélectionner

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title>Agenda php</title> </head> <body style="background-color:#B7C1A2";> <h2 style="color:blue;">Un agenda en php</h2> <p>Il a été résolu le probème ,du moins nous l'espérons, en utilisant les tableaux de façon différente : <ol> <li>tableau indicié</li> <li>tableau associatif à plusieurs colonnes</li> </ol> </p> <h3 style="color:blue";> Avec le tableau indicié</h3> <?php $numCours = array(8, 5, 4, 1, 3, 2, 6, 7, 9); $debutCours = array(mktime(14,0,0,04,14,2010), mktime(14,0,0,04,12,2010), mktime(16,0,0,04,13,2010),mktime(8,0,0,04,16,2010), mktime(15,0,0,04,14,2010), mktime(16,0,0,04,15,2010), mktime(9,0,0,04,16,2010), mktime(14,0,0,04,16,2010), mktime(14,0,0,04,15,2010)); $finCours = array(mktime(12,0,0,04,16,2010), mktime(16,0,0,04,12,2010), mktime(18,0,0,04,13,2010), mktime(16,0,0,04,14,2010), mktime(17,0,0,04,14,2010), mktime(16,0,0,04,15,2010), mktime(18,0,0,04,15,2010), mktime(16,0,0,04,16,2010), mktime(11,0,0,04,16,2010)); //La fonction array_multisort ne fonctionnant pas, j'ai utilise la focntion sort() sort($numCours); sort($debutCours); sort($finCours); echo "<table width=80% border=1 bordercolor=blue> <tr><th>Date des Cours</th><th>Horaires des cours</th><th><small> Les chevauchements</th><tr><td>"; //tableau 1 echo "<table border=1 align=center> <tr><th>Cours</th><th>Date</th></tr>"; foreach($numCours as $maCle=>$maValeur) { echo "<tr><td align=center>".$maValeur."</td><td>".strftime("%d/%m/%Y",$debutCours[$maCle])."</td></tr>"; } echo "</table></td><td>"; //tableau 2 echo "<table border=1 align=center> <tr><th>Début du cours</th><th>Fin du cours</th></tr>"; foreach($debutCours as $maCle=>$maValeur) { echo "<tr><td align=center>".strftime("%H h",$debutCours[$maCle])."</td><td align=center>".strftime("%H h",$finCours[$maCle])."</td></tr>"; } echo "</table></td><td>"; //tableau diff echo "<table border=1 bordercolor=green align=center> <tr><th>Cours</th> <th>Date</th> <th>Fin cours précédent </th> <th>Debut cours suivant</th></tr>"; foreach($debutCours as $maCle=>$maValeur) { if ($numCours and $debutCours[$maCle] < (@$finCours[$maCle-1])) { echo "<tr><td align=center>".$maCle."</td><td align=center>".strftime("%d/%m/%Y",$debutCours[$maCle])."</td><td align=center>".strftime("%H h",$finCours[$maCle-1])."</td><td align=center>".strftime("%H h",$debutCours[$maCle])."</td></tr>"; } } echo "</table></table>"; ?> <!----------------------------------------------------------------------------------------------------------------> <br /> <br /> <h3 style="color:blue;">Avec un tableau associatif à plusieurs colonnes</h3> <p>Nous pouvons faire cela, on utilisant un tableau associatif à plusieurs colonnes. Pour trier un tableau associatif, on utilise la fonction ksort() si l'on souhaite maintenir la correspondance entre les clés et les valeurs. Avec asort(), cette correspondance n'est pas respectée. Faites l'essai!!!</p> <?php $tableau_Cours=array(); $tableau_Cours['Cours_005']=array (mktime(14,0,0,04,15,2010), mktime(16,0,0,04,15,2010)); $tableau_Cours['Cours_003']=array (mktime(14,0,0,04,14,2010), mktime(16,0,0,04,14,2010)); $tableau_Cours['Cours_001']=array (mktime(14,0,0,04,12,2010), mktime(16,0,0,04,12,2010)); $tableau_Cours['Cours_002']=array (mktime(16,0,0,04,13,2010), mktime(18,0,0,04,13,2010)); $tableau_Cours['Cours_004']=array (mktime(15,0,0,04,14,2010), mktime(17,0,0,04,14,2010)); $tableau_Cours['Cours_008']=array (mktime(9,0,0,04,16,2010), mktime(12,0,0,04,16,2010)); $tableau_Cours['Cours_006']=array (mktime(16,0,0,04,15,2010), mktime(18,0,0,04,15,2010)); $tableau_Cours['Cours_007']=array (mktime(8,0,0,04,16,2010), mktime(11,0,0,04,16,2010)); $tableau_Cours['Cours_009']=array (mktime(14,0,0,04,16,2010), mktime(16,0,0,04,16,2010)); //ksort trie le tableau suivant les clés en maintenant la correspondance entre les clés et les valeurs. Cette fonction est importante pour les tableaux associatifs ksort($tableau_Cours); echo "<table width=80% border=1 bordercolor=blue> <tr><th>Date des Cours</th><th> Les chevauchements</th><tr><td>"; //tableau 1 echo "<table border=1 align=center> <tr><th>Cours</th><th>Date des cours</th><th>Début du cours</th><th>Fin du cours</th></tr>"; foreach($tableau_Cours as $maCle=>$maValeur) { echo "<tr><td align=center>".$maCle."</td><td align=center>".strftime("%d/%m/%Y",$maValeur[0])."</td><td align=center>".strftime("%H h",$maValeur[0])."</td><td align=center>".strftime("%H h",$maValeur[1])."</td></tr>"; } echo "</table></td><td>"; //Tableau diff echo "<table border=1 bordercolor=green align=center> <tr><th>Cours</th> <th>Date</th> <th>Fin cours précédent </th> <th>Debut cours suivant</th></tr>"; foreach($tableau_Cours as $maCle=>$maValeur) { $debut_Cours = $maValeur[0]; if ($debut_Cours < (@$fin_Cours)) echo "<tr><td align=center>".$anCle."</td><td align=center>".strftime("%d/%m/%Y",$anValeur[0])."</td><td align=center>".strftime("%H h",$anValeur[1])."</td><td align=center>".strftime("%H h",$maValeur[0])."</td></tr>"; $fin_Cours = $maValeur[1]; $anCle=$maCle; $anValeur=$maValeur; } echo "</table></table>"; ?> </body> </html>

Eléphanteau du PHP | 11 Messages

18 avr. 2010, 19:46

OK c'est ça. Il fallait donc créer 2 nouvelles variables que prennent la valeur cle et la valeur valeur.

Merci beaucoup et bonne soirée