kostenloser Webspace werbefrei: lima-city


Mehrdimensionales Array durch Explode auslesen

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    technofan

    Moderator Kostenloser Webspace von technofan

    technofan hat kostenlosen Webspace.

    Hallo Leute

    ich schreibe zur Zeit an einem kleinen Verwaltungsprogramm. Dieses Programm soll Mittag/arbeit">arbeiter grün einfärben, wenn der HEUTIGE Tag in der Zeitspanne des Urlaubs liegt.

    hier mal der Code:

    //Hole Daten Urlaub   
    if(!empty($row->urlaub)){   
    $urlaube = explode(",", $row->urlaub);
    $tagid = count($urlaube) - 1;
    for($a = 0; $a < $tagid; $a++)
    {
    $urlaubstag = explode("-", "".$urlaube."[".$tagid."]");
    if(date("d.m.Y", time()) >= "".$urlaubstag."[".$tagid."][0]" AND date("d.m.Y", time()) <= "".$urlaubstag."[".$tagid."][1]"){
    $bgcolor = '#C3D69B';
    }
    }
    }


    in der Spalte "Urlaub" stehen die urlaubszeiträume so drinne:

    TT.MM.JJJJ - TT.MM.JJJJ , TT.MM.JJJJ - TT.MM.JJJJ, ... u.s.w.
    also immer von TAG.MONAT.JAHR bis TAG.MONAT.JAHR , von TAG.MONAT.JAHR bis TAG.MONAT.JAHR , ... u.s.w.
    Das "," trennt also die Urlaubszeiträume, die sich ja immerhin auch mal über 3 Wochen strecken können.

    Jetzt habe ich also 2 explodes:
    $urlaube = explode(",", $row->urlaub); // trennt die Urlaubszeiträume

    und

    $urlaubstag = explode("-", "".$urlaube."[".$tagid."]"); // trennt Urlaubsanfang und Urlaubsende

    mein Knackpunkt ist nun diese Stelle:

    if(date("d.m.Y", time()) >= "".$urlaubstag."[".$tagid."][0]" AND date("d.m.Y", time()) <= "".$urlaubstag."[".$tagid."][1]")

    wie bekomme ich es hin die beiden Explodes so auszulesen, dass er Anfang und Ende des jeweiligen Urlaubs erkennt?

    Gruß
    technofan
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. e********l

    Wieso lagerst du die Termine nicht in eine extra Tabelle aus? Das ist wesentlich einfacher in der Handhabe und erspart dir viel Arbeit und Aufwand.

    @Problem: Du solltest mit timestamp Werten arbeiten oder einfach das gängige DateTime Format (Y-M-D) nutzen, damit PHP damit rechnen kann. "d.m.Y" ist kein Datum mit dem ein Programm ohne weiteres rechnen kann.

    Beitrag zuletzt geändert: 3.6.2009 13:25:39 von evil-devil
  4. Autor dieses Themas

    technofan

    Moderator Kostenloser Webspace von technofan

    technofan hat kostenlosen Webspace.

    evil-devil schrieb:
    Wieso lagerst du die Termine nicht in eine extra Tabelle aus? Das ist wesentlich einfacher in der Handhabe und erspart dir viel Arbeit und Aufwand.


    weil es unterschiedlich viele Urlaubszeiträume geben kann
    ich hab die jetzt auch mal beim auslesen mit mktime in unix umgewandelt... da sind aber alle die gleichen...
  5. e********l

    Und wieso sollte es die in einer Tabelle nicht geben können?

    Tabelle Urlaub (id, start, ende, benutzerid)
    und die füllst du und voila. Somit könntest du sogar lediglich die Urlaubszeiten der nächsten X Tage, Wochen, Monate anzeigen...
  6. Autor dieses Themas

    technofan

    Moderator Kostenloser Webspace von technofan

    technofan hat kostenlosen Webspace.

    evil-devil schrieb:
    Und wieso sollte es die in einer Tabelle nicht geben können?

    Tabelle Urlaub (id, start, ende, benutzerid)
    und die füllst du und voila. Somit könntest du sogar lediglich die Urlaubszeiten der nächsten X Tage, Wochen, Monate anzeigen...


    joa, könnte man machen... aber das heißt auch noch ne Funktion in JS, damit die nötigen Eingabefelder erscheinen... habs jetzt übrigends auch hinbekommen... der ganze Schmarn sieht dann so aus:

    //Hole Daten Urlaub
    if(!empty($row->urlaub)){   
    $zeitraum = explode(",", $row->urlaub);
    $zeitraumid = count($zeitraum) - 1;
    for($b = 0; $b < $zeitraumid; $b++)
    {
    $tag = explode("-", $zeitraum[$b]);
    
    $anfang = explode(".", $tag[0]);
    $day    = $anfang['0'];
    $month  = $anfang['1'];
    $year   = $anfang['2'];
    $anfang = mktime(0,0,0,$month,$day,$year);
    
    $ende = explode(".", $tag[1]);
    $day     	 = $ende['0'];
    $month   	 = $ende['1'];
    $year    	 = $ende['2'];
    $ende = mktime(0,0,0,$month,$day,$year);
    
    if(time() >= $anfang AND time() - 84600 <= $ende){
    $bgcolor = '#C3D69B';
    
    break;
    }
    }
    }


    die, die es brauchen können... viel Spaß ^^
  7. e********l

    Wenn du meinen ersten Beitrag richtig gelesen hättest...dann hättest du es soviel einfacher haben können.

    Du hättest zb. auch mit der STRTOTIME() Funktion von PHP arbeiten können oder einfach mit mkdate nicht ein "d.m.y" sondern ".Y-m-d" erstellen können. Letzteres Format funktioniert in IF Abfragen wunderbar...

    Deine obige Lösung ist 10mal komplizierter als notwendig. Sry.
  8. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!