Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Array auslesen richtig gemacht ?!

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] Array auslesen richtig gemacht ?!

    Hallo,

    ich habe zurzeit irgendwie ein Denkfehler..

    Ich habe ein Array "$cat_array" in dem Bereiche für Anreise und Abreise Tage stehen es gibt am ende 3 Kategorien a,b,c. Es kann aber sein das Kategorie A über 3 Jahre angelegt wird.. Hier habe ich nun in der Kat A, Bereiche von 2 Jahre eingefügt.

    Diese Bereiche für die An und Abreise Tage übergebe ich weiter in eine Function mit der ich mir dann ausgeben lassen kann welche Tage von "eingabe_start" und "eingabe_end" in den Bereich fallen..

    Am Ende soll es ein Belegungskalender werden..

    Falls da noch fragen sein sollten.. einfach Fragen..

    Nun zu dem Problem:

    So wie ich das zurzeit erstellt habe überschreibt er mir $cat_a_start und $cat_a_end immer nur mit dem letzten array key... ich brauche aber ja alle..
    Wie löse ich das am besten ?

    PHP-Code:
    <?



    $cat_array[a][start] =    array("1388574000", "1420110720");  // 01.01.2014, 01.01.2015
    $cat_array[a][end]     =    array("1401530400", "1433067120");    // 31.05.2014, 31.05.2015

    $eingabe_start    =     strtotime($_POST['anreise']); // z.b. 02.01.2014
    $eingabe_end    =    strtotime($_POST['abreise']); // z.b. 04.01.2014  das wären dann 4 Tage im Bereich KAT A

    function Ausgabe($start,$end,$kat,$eingabe_start,$eingabe_end) {
        for ($i = $start; $i <= $end; $i += 86400) {
            if (gmdate("Y-m-d",$i) >= gmdate("Y-m-d",$eingabe_start) AND gmdate("Y-m-d",$i) <= gmdate("Y-m-d",$eingabe_end) ) { 
                $cat_alle_array[] = gmdate("Y-m-d",$i);                
            } 
        }    
        return $cat_alle_array;
    }

    foreach($cat_array[a] AS $value => $key)
       {    
           for($i=0; $i < count($key); $i++)
           {   
               if ($value == "start") {
               $cat_a_start = $key[$i];
               echo "start";
               }
               if ($value == "end") {
               $cat_a_end = $key[$i];
               echo "end";
               }
               $cat_alle_array[a] = Ausgabe($cat_a_start,$cat_a_end,'a',$eingabe_start,$eingabe_end);
           }            
       }
       
        // ANZAHL DER TAGE IM KATEGORIEBEREICH ZÄHLEN:
        $cat_a_count = count ( $cat_alle_array[a] ); 
        
        echo $cat_a_count;  // Nun könnte ich je Kategorie die Anzahl der Tage in dem Bereich mit dem Kategorie Preis Multiplizieren.
    ?>


  • #2
    Kannst du für uns einmal in Worte fassen, was das insgesamt machen soll? Die bisherigen Erklärungen

    Zitat von dondon4002 Beitrag anzeigen
    Ich habe ein Array "$cat_array" in dem Bereiche für Anreise und Abreise Tage stehen es gibt am ende 3 Kategorien a,b,c. Es kann aber sein das Kategorie A über 3 Jahre angelegt wird.. Hier habe ich nun in der Kat A, Bereiche von 2 Jahre eingefügt.
    und
    Zitat von dondon4002 Beitrag anzeigen
    Am Ende soll es ein Belegungskalender werden..
    verstehe ich ehrlich gesagt nicht. Ich denke aber, dass das wesentlicher einfacher zu lösen wäre. Die letzte for-Schleife innerhalb der foreach() macht z.B. wenig Sinn.

    Kommentar


    • #3
      Zitat von dondon4002 Beitrag anzeigen
      So wie ich das zurzeit erstellt habe überschreibt er mir $cat_a_start und $cat_a_end immer nur mit dem letzten array key... ich brauche aber ja alle..
      Wie löse ich das am besten ?
      PHP-Code:
      $cat_a_start[] = $key[$i];
      $cat_a_end[] = $key[$i]; 
      Um immer was ans Array zu hängen.

      Kommentar


      • #4
        Na sicher

        Also nochmal von vorne.

        Ich habe eine Wohnung die Vermietet werden soll. Demnach soll es die möglichkeit geben eine Online Buchung durchzuführen.

        Für die Wohnung gibt es 3 Preiskategorien:

        z.b. KAT A - 01.01.2014 - 31.05.2014 10€
        z.b. KAT B - 01.06.2014 - 31.08.2014 20€
        z.b. KAT C - 01.09.2014 - 31.12.2014 15€

        Die Preise sind immer gleich. Der Zeitraum kann von Jahr zu Jahr Variieren, es wird für 3 Jahre vorgeplant.

        Der Nutzer kann nur ein von - bis Datum eingeben. Daraus soll das Script dann errechnen wieviele Tage in KAT A - KAT B oder KAT C eingeplant sind und am ende noch den Preis errechnen..

        Das klappt auch soweit alles solange ich nur EIN Jahr habe.. sobald ich ein 2. Jahr mit einplane schreibt er das. 1. Jahr einfach über.

        reicht dir das ?

        Kommentar


        • #5
          Zitat von Kinger Beitrag anzeigen
          PHP-Code:
          $cat_a_start[] = $key[$i];
          $cat_a_end[] = $key[$i]; 
          Um immer was ans Array zu hängen.
          die beiden Strings sollen aber kein Array sein. mh.. das würde die function ja dann nicht interpretieren..

          er soll für jeden start und ende sofort die Tage zählen, die gebucht werden.

          vllt liege ich auch mit meiner Philosophie total falsch..

          Kommentar


          • #6
            Probier mal das: (ab PHP 5.4)
            PHP-Code:
            function getPriceForDate($date, array $pricelist)
            {
                
            $date strtotime($date);
                foreach (
            $pricelist as $season) {
                    
            $season_start strtotime($season['from']);
                    
            $season_end strtotime($season['to']);

                    if (
            $date >= $season_start && $date <= $season_end) {
                        return 
            $season['price'];
                    }
                }

                
            // Falls kein Preis für diesen Zeitraum eingetragen => Default-Preis
                
            return 10;
            }

            function 
            getPriceForDateRange($start$end, array $pricelist)
            {
                
            $start DateTime::createFromFormat('d.m.Y'$start);
                
            $end DateTime::createFromFormat('d.m.Y'$end);

                
            $total 0;

                while (
            $start $end) {
                    
            $start->modify("+1 day");
                    
            $total += getPriceForDate($start->format('Y-m-d'), $pricelist);
                }

                return 
            $total;
            }

            $prices = [
                [
                    
            'from' => '01.01.2014',
                    
            'to' => '31.05.2014',
                    
            'price' => 10
                
            ],
                [
                    
            'from' => '01.06.2014',
                    
            'to' => '31.08.2014',
                    
            'price' => 20
                
            ],
                [
                    
            'from' => '01.09.2014',
                    
            'to' => '31.12.2014',
                    
            'price' => 15
                
            ],
            ];

            // ganzer Mai und Juni, also 1 Monat Saison 1 und 1 Monat Saison 2
            $user_start "01.05.2014";
            $user_end "30.06.2014";
            echo 
            getPriceForDateRange($user_start$user_end$prices); 

            Kommentar


            • #7
              Sorry habe auf meinem Webserver leider nur PHP Version 5.3.28.. somit macht er auch direkt Probleme ;-(

              Kommentar


              • #8
                Dann ersetz mal die [] durch array(). (Oder du testest z.B. hier: https://eval.in/177852 )

                Kommentar


                • #9
                  Ah okay Jetzt klappt es

                  Problem ist nur wenn man Start und Ende auf den Selben Tag setzt.. dann Rechnet er diesen Tag nicht aus.

                  Kommentar


                  • #10
                    Mein Gott, dann denk halt mal selber mit. Du bist hier im FG-GForum.
                    --

                    „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                    Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                    --

                    Kommentar


                    • #11
                      Dann zähle einfach eins dazu? Ich bin halt davon ausgegangen wie das bei Hotels gemacht wird - Zimmer werden nach Nächten vergeben. Am selben Tag kommen und gehen gibts eben nicht - das Zimmer ist immer auf min. eine Nacht gebucht. Wenn du das anders brauchst kannst du das ja leicht selber anpassen.

                      Allerdings ist mir wirklich ein Patzer unterlaufen, nämlich bei den Vergleichen. Dort habe ich < und > anstatt <= bzw. >= verwendet.

                      Kommentar


                      • #12
                        Vielen Dank Tropi ! Jetzt funktioniert es

                        @nikosch: Sei mal nicht so unfreundlich gegenüber neuen Usern ! Finde ich unverschämt.. hätte ich den Fehler selber gefunden müsste ich hier nicht nochmal Nachfragen !

                        Ich bedanke mich für die Hilfe ! Jetzt habe ich direkt einen Lösungsansatz und habe sogar noch was dazu gelernt

                        Kommentar


                        • #13
                          @nikosch: Sei mal nicht so unfreundlich gegenüber neuen Usern ! Finde ich unverschämt.. hätte ich den Fehler selber gefunden müsste ich hier nicht nochmal Nachfragen !
                          http://www.php.de/php-fortgeschritte...uncements.html
                          Wer darf hier posten?
                          Zunächst richtet sich dieses Profi-Forum ausschließlich an PHP-Profis und nicht an Anfänger mit möglicherweise schwierigen Fragen. Die Profis aus diesem Forum, lesen und schreiben auch im Anfänger-Forum.

                          Du bist ein Profi? Dann...
                          ... hast Du min. 3 Jahre Praxis-Erfahrung mit PHP.
                          ... kennst Du den Unterschied zwischen Apache Modul und der (Fast)CGI-Variante.
                          ... kennst Du einigermaßen das HTTP(S)-Protokoll.
                          ... kennst Du die Feinheiten des jeweiligen HTML-Standards, den Du verwendest, und weisst, daß die Angabe von DOCTYPE und Content-type keine Gemeinheiten des W3C sind.
                          ... kennst Du ebenfalls den Unterschied zwischen Java und Javascript und weisst, dass das nichts mit PHP zu tun hat.
                          ... kennst Du die Kontrollstrukturen und weisst sie einzusetzen.
                          ... kennst Du die Datentypen, die Operatoren und Du weisst, wozu Sessions (mit oder ohne Cookie) gut sind.
                          ... kennst Du PEAR und hast es schonmal eingesetzt.
                          ... kennst Du die Bedeutung und den Nutzen von XML.
                          ... hast du praktische Erfahrungen mit OOP gesammelt.
                          ... kennst Du einige Design Patterns.
                          ... kennst Du nicht nur das PHP Manual, die PHP FAQ, das MySQL Manual und Google, sondern Du kannst selbstverständlich auch suchen.

                          - Keine Syntaxfehler, weil Du die selber findest.
                          - SQL Fehler lässt Du Dir anzeigen, damit Du sie beseitigen kannst.
                          - Fragen, warum das Script mit Browser A nicht so will wie mit Browser B, verkneifst Du Dir, wenn es an fehlerhaften HTML liegen sollte.

                          Formuliere Deine Frage so, dass der Leser kein Problem hat, Dein Problem zu erkennen. Hellseher gibt's nur im Kino.

                          Beachte bei der Überschrift, dass Vokabeln wie "Problem", "Frage", "Fehler" u.ä. genaugenommen sinnfrei sind. Probleme, Fragen oder Fehler hat hier jeder...

                          Natürlich lieferst Du die nötigen Infos dazu:
                          - Link auf ein phpinfo() des Hostes, auf dem das Script laufen lernen soll.
                          - ggf. noch Angaben des Betriebssystem
                          - Die relevanten Teile Deines Scriptes, die Du bitte vom Original kopierst. Du willst ja nicht noch zusätzlich Abtippfehler reinmurksen.
                          - Eine/mehrere Fehlermeldung(en). Markiere im Script die Zeile(n), über die der Parser stolpert.
                          - Drängle nicht! Das mag keiner, und Du willst ja bei der nächsten Frage nicht ignoriert werden.
                          - Korrigiere Deinen Text (notfalls auch nachträglich), wenn Du nicht belächelt werden willst!

                          --meikel / quadaptor (22.05.2008, 16:10)


                          Aus gegebenem Anlass betone ich nochmal vor allem den letzten Abschnitt: ob du Profi bist oder nicht, wird nicht nur daran festgemacht, ob du weißt, was PHP ist und schon damit Erfahrungen gesammelt hast, sondern auch an der Art deiner Fragestellung.

                          Von einem Profi-Posting wird auch erwartet, dass der Autor…
                          • …sein Problem genau beschreibt und eine konkrete Frage stellt
                          • …Helfer an seine Entwicklungsprozess teilhaben lässt und schreibt, worum es geht und was er bereits unternommen hat, um das Problem selbstständig zu lösen, da er weiß, dass man einem Profi nicht alles aus der Nase ziehen muss
                          • …selbstständig und unaufgefordert notwendige Codes postet, dabei aber immer weiß, was er posten muss und somit nicht sein gesamtes Programm ins Forum stellt und erwartet, dass sich das jemand durchliest
                          • …dabei selbstverständlich die entsprechenden BB-Codes richtig einzusetzen weiß
                          • …über die häufig gesehene schlechte Angewohnheit, Ignoranz gegenüber Postings, die man nicht versteht oder verstehen will, zu zeigen, nur den Kopf schütteln kann
                          • …Eigeninitiative und Interesse am eigenen Problem zeigt, „Mach mal“ ist auf PHP.de allgemein unterwünscht und hier im Profi-Forum selbstverständlich überhaupt kein Thema mehr
                          • …von selbst einen aussagekräftigen Titel wählt, der sein Problem und nicht seine Gemütslage treffend beschreibt
                          • …klar formulierte, syntaktisch, grammatikalisch und semantisch korrekte Sätze schreibt (Legastheniker mögen sich bitte als solche ausweisen, aber sich dennoch redlich bemühen)
                          • …Hilfe und Vorschläge (auch negativer Natur) annimmt und sich bewusst ist, dass er derjenige ist, der Hilfe braucht, nicht die anderen
                          • …freundlich und kompetent auftritt, den Helfenden Rückmeldung erstattet und nicht einfach sang- und klanglos verschwindet
                          Solltest du dir nicht sicher sein, ob du all das erfüllen kannst, dann poste bitte im Einsteiger-Forum. Postings, die sich nicht an die Regeln halten, werden von den Moderatoren an ihren richtigen Platz geschoben. Bei häufigem Falschposten, kann das aber auch zu einer Verwarnung führen.

                          --Manko10 (13.04.2009, 13:26)
                          --

                          „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                          Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                          --

                          Kommentar

                          Lädt...
                          X