Ankündigung

Einklappen
Keine Ankündigung bisher.

Bessere if-Abfrage

Einklappen

Neue Werbung 2019

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

  • Bessere if-Abfrage

    Liebe Kollegen,

    ich habe folgende if-Abfrage:

    PHP-Code:
    foreach(Item::getAllItemnumbers() as $i) :
        
    $a $item->get($i->item_number);
        if (!empty(
    $a)) { $items[] = $a; }
    endforeach; 
    Es werden sich demnach alle verfügbaren Artikelnummern geholt und in der folgenden Schleife werden die Artikeldaten zusammengesetzt um daraus letztlich ein großes Array mit allen Artikeln zu machen.
    Was mich stört ist der Syntax der if-Abrage, die null Werte herausfiltern soll. Schöner wäre aus meiner Sicht in etwa soetwas hier:

    PHP-Code:
    foreach(Item::getAllItemnumbers() as $i) :
        if(!empty(
    $a $item->get($i->item_number)) : $items $a; endif;
    endforeach; 
    Das lässt sich aber nicht ohne Syntax Fehler in PHP darstellen. Wie geht ihr da vor, wie könnte man das noch lösen?

    Besten Dank für ein paar knackige Hinweise.



    Restaurant Bewertungsportal yumee.de

  • #2
    PHP-Code:
    foreach(Item::getAllItemnumbers() as $i) :
        
    $a $item->get($i->item_number);
        if(
    in_array(trim($a),[NULL,false,''])){ continue; } //wenn a null/false oder empty ist, dann überspringe die schleife
       
    $items[] = $a;
    endforeach; 
    apt-get install npm -> npm install -g bower -> bower install <package> YOLO [URL]https://www.paypal.me/BlackScorp[/URL] | Mein Youtube PHP Kanal: [url]https://www.youtube.com/c/VitalijMik[/url]

    Kommentar


    • #3
      PHP-Code:
      $items = [];

      foreach( 
      Item::getAllItemnumbers() as $i ) {

          if( !empty(
      $item->get($i->item_number)) ) {

              
      $items[] = $item->get($i->item_number)

          }


      Es sollte leserlich und verständlich sein und nicht kurz und kryptisch.

      Kommentar


      • #4
        Andere Variante mit array-Funktionen:

        PHP-Code:
        $items array_map(function ($i) use ($item) {
            return 
        $item->get($i->item_number);
        }, 
        Item::getAllItemnumbers());

        $items array_filter($items); 
        Aber ich sehe da eher ein Problem bei der Item-Klasse, da diese ja für die Items verantwortlich sein sollte.

        Kommentar


        • #5
          Danke für die unerwartet schnellen Rückmeldungen

          Zitat von protestix Beitrag anzeigen
          PHP-Code:
          $items = [];

          foreach( 
          Item::getAllItemnumbers() as $i ) {

          if( !empty(
          $item->get($i->item_number)) ) {

          $items[] = $item->get($i->item_number)

          }


          Es sollte leserlich und verständlich sein und nicht kurz und kryptisch.
          Das Problem bei der Lösung ist, dass alle Funktionen und Queries die hinter $item->get($i->item_number) liegen, dann erneut, d.h. insgesamt zwei mal, aufgerufen werden. Das kann bei einer höheren Anzahl items (> 1 Mill.) deutliche Unterschiede ausmachen.

          Zitat von Dormilich Beitrag anzeigen
          Andere Variante mit array-Funktionen:

          PHP-Code:
          $items array_map(function ($i) use ($item) {
          return 
          $item->get($i->item_number);
          }, 
          Item::getAllItemnumbers());

          $items array_filter($items); 
          Aber ich sehe da eher ein Problem bei der Item-Klasse, da diese ja für die Items verantwortlich sein sollte.
          Das ist in diesem Fall absolut korrekt. Und so werde ich es auch lösen. Btw. dein Lösungsansatz ist sehr interessant.
          Restaurant Bewertungsportal yumee.de

          Kommentar


          • #6
            Zitat von inkamina Beitrag anzeigen

            Das Problem bei der Lösung ist, dass alle Funktionen und Queries die hinter $item->get($i->item_number) liegen, dann erneut, d.h. insgesamt zwei mal, aufgerufen werden. Das kann bei einer höheren Anzahl items (> 1 Mill.) deutliche Unterschiede ausmachen.
            PHP-Code:
            $items = [];

            foreach( 
            Item::getAllItemnumbers() as $i ) {
            $itemValue $item->get($i->item_number);
                if( !empty(
            $itemValue ) ) {
                    
            $items[] = $itemValue;
                }


            damit hast du das Problem gelöst
            apt-get install npm -> npm install -g bower -> bower install <package> YOLO [URL]https://www.paypal.me/BlackScorp[/URL] | Mein Youtube PHP Kanal: [url]https://www.youtube.com/c/VitalijMik[/url]

            Kommentar


            • #7
              Zitat von inkamina Beitrag anzeigen
              Btw. dein Lösungsansatz ist sehr interessant.
              Orientiert sich ein wenig an Funktionaler Programmierung.

              Kommentar


              • #8
                Die Lösung #6 die ja nichts anderes als eine "sprechende" Variante der Ausgangslösung #1 ist halte ich in Punkto Lesbarkeit + Geschwindigkeit für besser geeignet.

                Edit: Da wohl sichergestellt ist dass das Resultat von $item->get($i->item_number existiert kann die Variante #6 noch etwas verkürzt werden:
                PHP-Code:
                $items = [];

                foreach( 
                Item::getAllItemnumbers() as $i ) {
                   if( 
                $itemValue $item->get($i->item_number) )  $items[] = $itemValue;

                Kommentar


                • #9
                  Ich hätte gerne sowas in PHPs stdlib:

                  PHP-Code:
                  $items = new Stream($itemNumbers);
                    ->
                  map([$repo'getByNumber'])
                    ->
                  filter(function($item){
                      return 
                  $item instanceof Item;
                    })
                    ->
                  getElements(); 
                  Funktionen wie array_map, array_filter, array_reduce usw. sind unnötig unhandlich und klobig. imho
                  [SIZE="1"]Atwood's Law: any application that can be written in JavaScript, will eventually be written in JavaScript.[/SIZE]

                  Kommentar


                  • #10
                    Zitat von lottikarotti Beitrag anzeigen
                    Funktionen wie array_map, array_filter, array_reduce usw. sind unnötig unhandlich und klobig. imho
                    Genau. Deswegen hab ich mir genau so ein Helferlein mal erstellt. (https://github.com/Dormilich/array-list)

                    Kommentar


                    • #11
                      Finde ich nicht, ich nutze die häufig lieber, wie Schleifen...
                      Competence-Center -> Enjoy the Informatrix
                      PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

                      Kommentar


                      • #12
                        Zitat von Arne Drews Beitrag anzeigen
                        Finde ich nicht, ich nutze die häufig lieber, wie Schleifen...
                        Ich nutze sie auch häufig, finde sie aber trotzdem hässlich. Da gefällt mir selbst JavaScript besser:

                        PHP-Code:
                        items itemNumbers
                          
                        .map(repo.getItem)
                          .
                        filter(item => item instanceof Item
                        [SIZE="1"]Atwood's Law: any application that can be written in JavaScript, will eventually be written in JavaScript.[/SIZE]

                        Kommentar


                        • #13
                          Jo, JS macht das schon schick mit seinem Objekt-Model...
                          Ist am Ende ja auch Geschmacksache, ich finde bspw. PHP-Code mit häufigen IF oder FOR nicht sonderlich schön und versuche vieles auf andere Weise zu lösen, sofern es geht.
                          Performance o.ä. hat damit absolut nichts zu tun, geht dabei nur um meinen persönlichen Geschmack...
                          Competence-Center -> Enjoy the Informatrix
                          PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

                          Kommentar

                          Lädt...
                          X