Recherches approfondies dans un tableau associatif

DelChris Messages postés 2 Date d'inscription samedi 27 décembre 2008 Statut Membre Dernière intervention 4 janvier 2009 - 27 déc. 2008 à 12:44
DelChris Messages postés 2 Date d'inscription samedi 27 décembre 2008 Statut Membre Dernière intervention 4 janvier 2009 - 4 janv. 2009 à 12:10
Bonjour à tous.<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /??>






 






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] => <?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" /??><st1:place w:st="on">Holiday</st1:place>)



                        (([status]) => array[0] => Accepted)



 




Congé le 03 janvier accepté :


$special_days (([month]) => array([1] => 1)



                        (([day]) => array[1] => 3)



                        (([type]) => array[1] => <st1:place w:st="on">Holiday</st1:place>)



                        (([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 "\";

 

for ($i = 0; $i < 13; $i++)            //Les lignes (mois) du calendrier à afficher

{

  echo \"----
\";

  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 \"";

     
print ($month[$i]);

    }

    else

    {

      if ($j == 0)                     //Dans la première colonne

à

les noms des mois

      {

        echo ", \";

       
print ($month[$i]);

      }

      else

      {

        if ($i == 0)                   //Dans la 1ière ligne, les jours du mois

       
{

          echo \"";

          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 ",   width=25 bgcolor=\\"0099CC\\"> \";

                print(\"&nbsp\");

              }

              Else                //C’est un jour normal

à

on affiche en fond blanc

        
     
{

                echo \"";

                print("&nbsp");

              }

            }

          }

        }

      }

    }

    echo ", \";

  }

  echo \"\";

}

echo \"\";

echo "
";


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.

2 réponses

kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
31 déc. 2008 à 14:29
Salut,

J'avais déjà répondu un truc qui est déjà sorti de mon petit crâne il y a qq jours mais il n'est pas passé.
A mon avis c'est ta logique initiale qu'il faut revoir.
Pourquoi ne stockes tu pas les "365" jours de l'année dans ta base ?
(j'oublie peut être des trucs)
id
dateTime
type
status
D'une part ça sera, je pense, bien plus rapide que de faire des in_array(), et puis surtout ça ne bridera pas ton code pour les évolutions futures ... et c'est beaucoup plus simple, tu construis tout à partir d'une source unique et en une seule passe.

Cordialement,

Kohntark -
0
DelChris Messages postés 2 Date d'inscription samedi 27 décembre 2008 Statut Membre Dernière intervention 4 janvier 2009
4 janv. 2009 à 12:10
Bonjout, Kohntark.

Ce n'est effectivement pas une mauvaise idée du tout !!! Mais alors pas du tout du tout !!!

Je te remercie pour ta réponse. Je vais cogiter tout cela une fois que mes (2-3) neurones se seront reconnectés après les fêtes de fin d'année qu'ils viennent de vivre et je te tiendrai au courant.

En tous les cas, encore une fois, merci pour ton aide.

Christian.
0
Rejoignez-nous