code zusammenfassen/ vereinfachen

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

  • code zusammenfassen/ vereinfachen

    hallo php-freaks,
    hatt wer eine idee, wie ich die item1, 2, etc. zeilen zusammenfügen kann, sodass, wenn es 12 items werden, ich nicht nen kilometerlangen code habe?


    PHP-Code:
    <?
    $dateiname = "wahl.txt";
    {
    $datei = fopen($dateiname,"r");

            while (!feof($datei)) {
                    $zeile = fgets($datei,1000);
            }
    fclose($datei);
    parse_str($zeile);

    //------- item1----------------

    if($item1vote == "+1")
    {
        $item1 = $item1 + 1;
    }
    if($vote == "+2")
    {
        $item1 = $item1 + 2;
    }
    if($vote == "+3")
    {
        $item1 = $item1 + 3;
    }
    if($vote == "+4")
    {
        $item1 = $item1 + 4;
    }
    if($vote == "+5")
    {
        $item1 = $item1 + 5;
    }


    //------- item2----------------

    if($item2vote == "+1")
    {
        $item2 = $item2 + 1;
    }
    if($vote == "+2")
    {
        $item2 = $item2 + 2;
    }
    if($vote == "+3")
    {
        $item2 = $item2 + 3;
    }
    if($vote == "+4")
    {
        $item2 = $item2 + 4;
    }
    if($vote == "+5")
    {
        $item2 = $item2 + 5;
    }


       $fp = fopen($dateiname,"w");
       fwrite($fp,"&item1=".$item1);
       fwrite($fp,"&item2=".$item2);
       fwrite($fp,"&finish=1");
       fclose($fp);
    }
    gruss und dank
    b.

  • #2
    Re: code zusammenfassen/ vereinfachen

    dazu würde ich variable variablen benutzen.

    $variable_var = "$item1vote"
    zugriff dann über $$variable_var

    oder du lagerst das ganze in eine funktion aus, der du dann die jeweilige variable per referenz übergibst.


    und statt solcher if-konstrukte
    if($item1vote == "+1")
    {
    $item1 = $item1 + 1;
    }
    if($vote == "+2")
    {
    $item1 = $item1 + 2;
    }
    ...
    if($vote == "+5")
    {
    $item1 = $item1 + 5;
    }
    wäre wohl ein switch ganz angebracht :-)


    und, by the way:
    $item1 += 2;
    ergibt das gleiche wie
    $item1 = $item1 + 2;
    aber noch ein bisschen kürzer.
    Zuletzt geändert von wahsaga; 11.12.2002, 15:53.
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      jo wahsaga,
      scheinbar haste ahnung von der materie,
      sag mir doch mal bitte, wie ich das mit variablen variabeln anstelle.

      und aähmm, was isn bitte ein switch? *grübel*
      edit:

      also zum switch hab ich folgendes gefunden,
      aber wie wende ich das nun auf mein script an?


      PHP-Code:
      <?PHP
      $var 
      2;
      switch (
      $var)
       {   
      case 
      0:        echo "\$var ist gleich 0";        
      break;   
      case 
      1:        echo "\$var ist gleich 1";        
      break;    
      case 
      2:        echo "\$var ist gleich 2";        
      break;
      }
      ?>
      gruss
      b.
      Zuletzt geändert von bastian; 11.12.2002, 16:19.

      Kommentar


      • #4
        PHP-Code:
        <?
        $dateiname = "wahl.txt";
        {
        $datei = fopen($dateiname,"r");

                while (!feof($datei)) {
                        $zeile = fgets($datei,1000);
                }
        fclose($datei);
        parse_str($zeile);

        if($item1vote == "+1")
        $item1++;
        $item1 = $item1 + (int)$vote;
        if($item2vote == "+1")
        $item2++;
        $item2 = $item2 + (int)$vote;


           $fp = fopen($dateiname,"w");
           fwrite($fp,"&item1=".$item1);
           fwrite($fp,"&item2=".$item2);
           fwrite($fp,"&finish=1");
           fclose($fp);
        }
        so ?
        meine Projekte bestaunen: http://www.kleiza.de

        Kommentar


        • #5
          hallo zauber-campus,

          so?
          mhhh, das sieht schon wesentlich optimierter aus, als meines!
          bitte erkläre mir mal zwei sachen:

          1. $item1 = $item1 + (int)$vote; diese zeile versteh ich null,
          2. wie kann ich jetzt mit +5 punkten für ein item voten...?

          10k.thx
          bastian

          Kommentar


          • #6
            Re: code zusammenfassen/ vereinfachen

            deine konstruktion
            if($item2vote == "+1")
            {
            $item2 = $item2 + 1;
            }
            if($vote == "+2")
            {
            $item2 = $item2 + 2;
            }
            if($vote == "+3")
            {
            $item2 = $item2 + 3;
            }
            if($vote == "+4")
            {
            $item2 = $item2 + 4;
            }
            if($vote == "+5")
            {
            $item2 = $item2 + 5;
            }
            kannst du mit switch folgendermassen ersetzen:

            Code:
            switch ($item2vote)
            {   
               case "+1":
                  $item2 += 1;
                  break;   
               case "+2":
                  $item2 += 2;
                  break;   
               case "+3":
                  $item2 += 3;
                  break;   
               case "+4":
                  $item2 += 4;
                  break;   
               case "+5":
                  $item2 += 5;
                  break;   
            }
            I don't believe in rebirth. Actually, I never did in my whole lives.

            Kommentar


            • #7
              danke wahsaga,
              kannst du mir sagen, was campus hiermit meint:

              $item1 = $item1 + (int)$vote;



              b.

              //edit:

              in dem bsp. welches ich da gefunden habe, fängt switch mit var an,
              welche variablen gebe ich den da an?
              var1= $item1 ???

              b.
              Zuletzt geändert von bastian; 11.12.2002, 16:50.

              Kommentar


              • #8
                aber der ansatz von campus sieht auch interessant aus.
                er bezieht sich glaube ich nur auf die falsche variable, die heisst ja bei dir $item1vote und nicht $vote;

                durch
                (int)$item1vote
                machst du eine typkonvertierung des strings $item1vote in eine integerzahl,
                bei "+1" kommt also 1 raus, bei "+2" 2, etc.

                also einfach draufaddieren, und fertig:

                $item1 += (int)$item1vote;
                $item2 += (int)$item2vote;
                $item3 += (int)$item3vote;
                $item4 += (int)$item4vote;
                $item5 += (int)$item5vote;


                dann sind auch keine wilden if-konstrukte mehr nötig, und auch kein switch.
                I don't believe in rebirth. Actually, I never did in my whole lives.

                Kommentar


                • #9
                  1: (int)$vote wandelt den string in nen integer wert um und haut glaube ich so sonderzeichen unw weg...

                  2: wat ?
                  meine Projekte bestaunen: http://www.kleiza.de

                  Kommentar


                  • #10
                    vielen dank für eure hilfe,
                    campus und wahsaga,

                    also das mit dem switchen funzt supi, wozu ist dann noch das heir???

                    $item1 += (int)$item1vote;

                    läuft doch auch ohne...
                    gruss
                    bastian

                    Kommentar


                    • #11
                      PHP-Code:
                      <?
                      $dateiname = "wahl.txt";
                      {
                      $datei = fopen($dateiname,"r");

                              while (!feof($datei)) {
                                      $zeile = fgets($datei,1000);
                              }
                      fclose($datei);
                      parse_str($zeile);
                      $bis=2;
                      for ($i=1;$i<=$bis;$i++) {
                      $itemname="item".$i."vote";
                      $itemob="item".$i;
                      $$itemob +=(int)$$itemname;
                      }
                         $fp = fopen($dateiname,"w");
                         fwrite($fp,"&item1=".$item1);
                         fwrite($fp,"&item2=".$item2);
                         fwrite($fp,"&finish=1");
                         fclose($fp);
                      }
                      oben hast du ja erwähnt, dass du es für mehrer items haben willst.. eigentlich brauchst du das (int) ja nicht, aber ist so sauberer programmiert und auf vielen anderen Progammiersprachen üblich..der umstieg ist auch leichter...
                      meine Projekte bestaunen: http://www.kleiza.de

                      Kommentar


                      • #12
                        also das mit dem switchen funzt supi, wozu ist dann noch das heir???

                        $item1 += (int)$item1vote;

                        läuft doch auch ohne...
                        ich sagte doch, dass der switch dann nicht mehr nötig ist, weil dieses genau das gleich erledigt, nur viel kürzer ;-)
                        I don't believe in rebirth. Actually, I never did in my whole lives.

                        Kommentar


                        • #13
                          oh mann, sorry das ich mich so unbeholfen anstelle,
                          bin nicht so der oberlogiker...;-)

                          aber was ich an campus' zuletzt gepostetem script nicht verstehe (was vielleicht auch garnicht drinne steht) ist, wo man für das jeweilige item entweder 1, 2, 3, 4 oder 5 punkte vergeben kann.

                          dafür waren ja vorher die switch-case-zeilen für zuständig...

                          wenns geht, vielleicht erklärt mir das einer nochmal.

                          gruss
                          bastian

                          Kommentar


                          • #14
                            aber was ich an campus' zuletzt gepostetem script nicht verstehe (was vielleicht auch garnicht drinne steht) ist, wo man für das jeweilige item entweder 1, 2, 3, 4 oder 5 punkte vergeben kann.

                            dafür waren ja vorher die switch-case-zeilen für zuständig...

                            wenns geht, vielleicht erklärt mir das einer nochmal.
                            himmelherrgottnochmal... aber man ist ja tierfreund :-)

                            also, nochmal gaaanz laangsaam:

                            du hast ja die variable $item1vote, die hat werte von "+1" bis "+5".
                            diese variable ist ein string.
                            durch (int)$variablenname machst du eine typkonvertierung in eine integerzahl, sofern möglich (wenn im string "abc" drinstehen würde, käme als integerzahl 0 raus.)
                            "+1" ergibt also 1, "+2" ergibt 2, ... "+5" ergibt 5 (merkst du was? zu jedem string die passende zahl, die sich einfach auf den vorhandenen wert von $item1 addieren lässt)

                            anstatt jetzt also abzufragen,
                            wenn "+1" dann addiere 1,
                            wenn "+2" dann addiere 2,
                            ...
                            wenn "+5" dann addiere 5.,

                            wird $item1vote in einen integer-wert zwischen 1 und 5 umgewandelt, der dann einfach draufaddiert werden kann, ohne abfragen, denn es ist ja immer der dem string entsprechende zahlenwert.


                            campus verwendet nur noch zusätzlich das mit den erwähnten variablen variablen, um das ganz in einer schleife abhandeln zu können, anstatt es für jedes item einzeln machen zu müssen:

                            $itemname="item".$i."vote"; // diese zeile ergibt je nach wert von i $item1vote, $item2vote, ..., $item5vote als string, nicht als variable!
                            $itemob="item".$i; // diese zeile ergibt je nach wert von i $item1, $item2, ..., $item5 als string, nicht als variable!

                            $$itemob +=(int)$$itemname; // und diese zeile greift dann variabel über die als strings hinterlegten variablennamen auf die entsprechenden variablen zu.


                            wenn du es jetzt immer noch nicht kapiert haben solltest, geb ich's aber auf :-)
                            I don't believe in rebirth. Actually, I never did in my whole lives.

                            Kommentar


                            • #15
                              lol. das mal mal ne ausführliche erklärung wahsaga
                              meine Projekte bestaunen: http://www.kleiza.de

                              Kommentar

                              Lädt...
                              X