Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] zwei if ein else

Einklappen

Neue Werbung 2019

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

  • [Erledigt] zwei if ein else

    Moin zusammen,
    wie im Betreff lesbar möchte ich gerne eine If-Bedingung machen in der eine weiter liegt. Beide sollen dann zusammen in einem else auslaufen.
    In etwa so:
    PHP-Code:
    if($bedingung1) {
    if(
    $bedingung2) {

    } else {
    echo 
    "Hier das else von beiden";

    geht das? Wenn ja wie? gibt es alternativen um dies zu verwirklichen?
    danke!
    LG thorsten

  • #2
    Beide Bedigungen in ein if zusammenpacken.
    [QUOTE=nikosch]Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.[/QUOTE]

    Kommentar


    • #3
      ok danke

      Kommentar


      • #4
        Dies ist vielleicht nicht direkt die Antwort auf die Frage des Themenstarters und benötigt vielleicht auch ein anderes Thema, dennoch würde ich hier gerne zeigen (da es ja keine Frage meinerseits ist, wollte ich kein neues Thema erstellen), wie Abfragen auch anders geschrieben werden können.

        Dies ist wie in meinem Fall auch sinnvoll mit Funktionen die über Jahre auch gewachsen ist und If-Bedingungen derart komplex verschachtelt wurden um bestimmte Anforderungen zu erfüllen, bis der Code nicht mehr wartbar war und überarbeitet werden musste.


        Die Anforderung war am Anfang, dass in einer Spalte in der Datenbank ein Erstellungsdatum eines Kommentars oder Forenbeitrag stand und dieses Datum schöner bzw. natürlicher dargestellt werden sollte. Beiträge die nicht älter als 24 Stunden (86400 Sekunden ware) sollten anstatt mit dem Datum mit "Heute" gekennzeichnet werden.

        PHP-Code:
        function fancy_date1($datetime) {
            
        $timestamp strtotime($datetime);
            
        $diff time() - $timestamp;
            if(
        $diff 86400) {
                return 
        'Heute';
            }
            else {
                return 
        date('d.m.Y H:i'$timestamp);
            }


        Über die Jahre wurde der Code durch unterschiedliche Entwickler erweitert. Jeder hat aber immer nur seine eigene Aufgabe erledigt und die Funktion als komplettes wurde nicht beachtet. (Original war noch deutlich komplexer!)

        PHP-Code:
        function fancy_date2($datetime) {
            
        $timestamp strtotime($datetime);
            
        $diff time() - $timestamp;
            if(
        $diff 86400) {
                if(
        $diff 7200) {
                    if(
        $diff 120) {
                        return 
        'Gerade eben';
                    }
                    else {
                        if(
        $diff 3600) {
                            return 
        'Vor '.floor($diff 60).' Minuten';
                        }
                        else {
                            return 
        'Vor etwa einer Stunde';
                        }
                    }
                }
                else {
                    if(
        $diff 21600) {
                        return 
        'Vor '.floor($diff 3600).' Stunden';
                    }
                    else {
                        return 
        'Heute';
                    }
                }
            }
            else {
                if(
        $diff 86400 and $diff 172800) {
                    return 
        'Gestern';
                }
                else {
                    return 
        date('d.m.Y H:i'$timestamp);
                }
            }


        Meine Aufgabe war, in diese Funktion noch eine Bedingung hinzuzufügen. Da der Code aber sehr schwer zu verstehen war aufgrund der verschachelten If-Bedingungen musste ich das ganze erst einem Refactoring unterziehen.

        Der neue Code lieferte die gleichen Ergebnisse wie die alte Funktion, war aber aufgrund der entfernten Verschachtelung deutlich einfacher zu lesen und zu verstehen.

        PHP-Code:
        function fancy_date3($datetime) {
            
        $timestamp strtotime($datetime);
            
        $diff time() - $timestamp;
            if(
        $diff 120) {
                return 
        'Gerade eben';
            }
            if(
        $diff 3600) {
                return 
        'Vor '.floor($diff 60).' Minuten';
            }
            if(
        $diff 7200) {
                return 
        'Vor etwa einer Stunde';
            }
            if(
        $diff 21600) {
                return 
        'Vor '.floor($diff 3600).' Stunden';
            }
            if(
        $diff 86400) {
                return 
        'Heute';
            }
            if(
        $diff 172800) {
                return 
        'Gestern';
            }
            return 
        date('d.m.Y H:i'$timestamp);


        Vielleicht noch Meinungen ob solche Beispiele gewünscht sind oder es ein unpassendes Unterforum ist in welchen ich solche Beispiele besser erstellen sollte.

        Kommentar


        • #5
          Zitat von Blar Beitrag anzeigen
          Vielleicht noch Meinungen ob solche Beispiele gewünscht sind oder es ein unpassendes Unterforum ist in welchen ich solche Beispiele besser erstellen sollte.
          Wenns dir nicht zu mühsam ist, einigermaßen zum Thema passt und nicht vom Ursprungsproblem ablenkt, warum nicht?

          Solche Abfragen nennen sich übrigens Guard Clauses, falls jemand nachlesen möchte.

          Kommentar


          • #6
            Zitat von Blar Beitrag anzeigen
            Vielleicht noch Meinungen ob solche Beispiele gewünscht sind oder es ein unpassendes Unterforum ist in welchen ich solche Beispiele besser erstellen sollte.
            Passte jetzt nicht grade zum Thema.

            BTW: http://php-de.github.io/jumpto/waechter/
            [QUOTE=nikosch]Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.[/QUOTE]

            Kommentar


            • #7
              Zitat von Blar Beitrag anzeigen
              PHP-Code:
              function fancy_date3($datetime) {
                  
              $timestamp strtotime($datetime);
                  
              $diff time() - $timestamp;
                  if(
              $diff 120) {
                      return 
              'Gerade eben';
                  }
                  if(
              $diff 3600) {
                      return 
              'Vor '.floor($diff 60).' Minuten';
                  }
                  if(
              $diff 7200) {
                      return 
              'Vor etwa einer Stunde';
                  }
                  if(
              $diff 21600) {
                      return 
              'Vor '.floor($diff 3600).' Stunden';
                  }
                  if(
              $diff 86400) {
                      return 
              'Heute';
                  }
                  if(
              $diff 172800) {
                      return 
              'Gestern';
                  }
                  return 
              date('d.m.Y H:i'$timestamp);


              Vielleicht noch Meinungen ob solche Beispiele gewünscht sind oder es ein unpassendes Unterforum ist in welchen ich solche Beispiele besser erstellen sollte.
              Öh..

              PHP-Code:
              function fancyDate($dateTimeString, array $locStream)
              {
                  
              $patch = array(
                      
              'y' => '',
                      
              'm' => '',
                      
              'd' => '',
                      
              'h' => '',
                      
              'i' => '',
                      
              's' => '',
                  );

                  
              $diff date_create()->diff(date_create($dateTimeString));

                  
              $stream array_intersect_key(
                      
              $locStream['length'], 
                      
              $patch
                  
              );
                  
                  
              $format[] = $diff->invert
                      
              $locStream['trailer']['before']
                      : 
              $locStream['trailer']['after'];

                  foreach ( 
              $stream as $key => $value ) {
                      
              $format[] = '%'.$key.' '.$value;
                  }

                  return 
              $diff->format(join(' '$format));

              PHP-Code:
              $locStream = array(
                  
              'length' => array(
                      
              'y' => 'Jahr(e)',
                      
              'm' => 'Monat(e)',
                      
              'd' => 'Tag(e)',
                      
              'h' => 'Stunde(e)',
                      
              'i' => 'Minuten',
                      
              's' => 'Sekunde(n)',
                  ),
                  
              'trailer' => array(
                      
              'before' => 'vor',
                      
              'after' => 'in',
                  ),
              );

              echo 
              'First-Contact-Day ist '.fancyDate('05.04.2063'$locStream); 
              Code:
              First-Contact-Day ist in 48 Jahr(e) 8 Monat(e) 11 Tag(e) 2 Stunde(e) 56 Minuten 26 Sekunde(n)
              [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

              Kommentar


              • #8
                Was willst du uns damit sagen? Der Code ist weder einfacher zu lesen noch macht er das gleiche. Denke eher, dass da wie bei sozialen Netzwerken der Fokus auf kürzlich vergangenen Ereignissen liegt. Ist halt in der Regel irrelevant oder das jetzt 12 oder 16 Wochen her war.

                PS.: Warum wird bei Minuten als einziges immer der Plural verwendet? :P

                Kommentar


                • #9
                  Zitat von Tropi Beitrag anzeigen
                  Solche Abfragen nennen sich übrigens Guard Clauses, falls jemand nachlesen möchte.
                  Vielen Dank, nach dem Begriff habe ich schon länger gesucht, wie so etwas genannt wird.

                  Kommentar


                  • #10
                    @Tropi: Ich wollte damit eigentlich einen "einfacheren" DateTime Ansatz zeigen.. Ich wollte da kein equivalent zu bauen.
                    [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

                    Kommentar


                    • #11
                      Vielen Dank für eure ganzen Antworten, auch wenn sie teilweise nahezu nix mit meiner Frage zu tun hatten

                      Kommentar


                      • #12
                        Zitat von thorsten23453 Beitrag anzeigen
                        Vielen Dank für eure ganzen Antworten, auch wenn sie teilweise nahezu nix mit meiner Frage zu tun hatten
                        Deine Frage ist relativ allgemein gestellt.

                        Ausgehend von deinem Codeblock im Startpost, kann man sich das ganze gehampel mit mehreren Ifs sparen und direkt eins nutzen:

                        PHP-Code:
                        if ( $bedingung1 && ! $bedingung2 ) {
                           echo 
                        "Wuhuu!";

                        [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

                        Kommentar

                        Lädt...
                        X