Bonjour à tous.
J'ai un gros soucis avec les tableaux associatifs. Je m'explique : je suis en train de réaliser une application web permettant de demander des congés/récups en ligne pour ma société.
L'employé, une fois identifié, arrive sur sa page personnelle affichant un calendrier annuel avec toutes les infos utiles dans ce genre de calendrier, soit les jours de congé et les jours de récups acceptés en vert, les jours de congé/récup en attente en rouge, les jours fériés en jaune, les week-ends en bleu et les jours de congé du 4/5 ième en violet, ...
Mon problème se situe ici. Pour pouvoir utiliser toutes ces données lues dans plusieurs tables de ma base de données, j'ai créé un tableau associatif du type :
$special_days(['month'][] = $search_sql['le mois du jour spécial'] ;
$special_days(['day'][] = $search_sql['le jour du jour spécial'] ;
$special_days['type'][] = $search_sql['le type de jour spécial'] ;
$special_day['status'][] = $search_sql['le status du jour spécial'] ;
En sachant, bien évidemment que l'année serait passée comme paramètre dans ma fonction de remplissage de ce tableau associatif, donc plus nécessaire à renseigner dedans.
Voiçi quelques exemples de ce que j'ai dans ce tableau $special_days :
Pour les congés/récups :
Congé les 02 janvier accepté :
$special_days (([month]) => array([0] => 1)
(([day]) => array[0] => 2)
(([type]) => array[0] => Holiday)
(([status]) => array[0] => Accepted)
Congé le 03 janvier accepté :
$special_days (([month]) => array([1] => 1)
(([day]) => array[1] => 3)
(([type]) => array[1] => Holiday)
(([status]) => array[1] => Accepted)
Récupération le 20 mars en attente
$special_days (([month]) => array([2] => 3)
(([day]) => array[2] => 20)
(([type]) => array[2] => Overtime)
(([status]) => array[2] => Pending)
Jour férié : le 1ier janver
$special_days (([month]) => array([3] => 1)
(([day]) => array[3] => 1)
(([type]) => array[3] => Legal)
(([status]) => PAS UTILE)
Une fois ce tableau rempli avec toutes les données nécessaires, j'affiche le calendrier en HTML, avec, pour chaque <td> (référencée par deux indices $i = les mois et $j = les jours), une recherche dans ce tableau associatif.
echo "<form name=\"employee_calendar\" id=employee_calendar>";
echo "<table border=\"2\" align=\"center\">";
for ($i = 0; $i < 13; $i++) //Les lignes (mois) du calendrier à afficher
{
echo "<tr>";
for ($j = 0; $j <= 31; $j++) //Les colonnes (jours) du calendrier
{
if ($i == 0 && $j == 0) //Dans la 1ière ligne/colonne à l'année qui est le premier élément du tableau $month.
{
echo "<td height=15 bgcolor=\"FF9999\">";
print ($month[$i]);
}
else
{
if ($j == 0) //Dans la première colonne à les noms des mois
{
echo "<td height=15 bgcolor=\"FFFF66\">";
print ($month[$i]);
}
else
{
if ($i == 0) //Dans la 1ière ligne, les jours du mois
{
echo "<td width=25 align=center bgcolor=\"FF99FF\">";
print ($j);
}
else //Tous les jours à afficher
{
ICI, je voudrais pouvoir faire une recherché dans mon tableau associatif avec une recherche sur les deux premières clés. Exemple :
Si le mois ($i) et le jour ($j) sur lesquels je suis occupé est présent dans mon tableau associatif dans les clés ['month'] et ['day']
Si (in_array($i et $j, $special_days['month']['day'])
Alors récupérer les valeurs des autres clés ['type'] et ['status'] et afficher la cellule selon les valeurs des clés ['type'] et ['status'] :
si ['type'] = 'Holiday' and ['status'] = 'Accepted' alors, afficher la cellule en vert
si ['type'] = 'Holiday' and ['status'] = 'Pending' alors, afficher la cellule en rouge
si ['type'] = 'Legal' alors, afficher la cellule en jaune, .
Je ne parviens pas à trouver une fonction qui va me permettre cette recherche dans mon tableau associatif. Est-ce que je dois utiliser in_array(), foreach() ou autre chose, et comment ??? Là est ma question.
La suite, concerne les week-ends à afficher en bleu et les jours normaux à afficher en blanc.
if (($day_of_week == "Sat") || ($day_of_week == "Sun")) //Pour afficher la cellule en bleu si c'est un samedi ou un dimanche
{
echo "<td width=25 bgcolor=\"0099CC\"> ";
print(" ");
}
Else //C'est un jour normal à on affiche en fond blanc
{
echo "<td width=25> ";
print(" ");
}
}
}
}
}
}
echo "</td>";
}
echo "</tr>";
}
echo "</tr>";
echo "</table>";
echo « </form> » ;
Toutes mes excuses si les accolades fermées ne correspondent pas aux accolades ouvertes, mais, pour ne pas trop envahir ce forum, j'ai supprimé quelques lignes inutiles.
Voilà, j'espère sincèrement que quelqu'un parmis vous saura m'aider dans la recherche approfondie dans un tableau associatif, car tout seul, je ne m'en sors pas.
Je vous remercie d'avance pour toute l'aide que vous pourrez m'apporter et j'en profite pour vous souhaiter à toutes et à tous, une BONNE ET HEUREUSE ANNEE 2009.
Christian.