Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Punkteberechnung obwohl zwei Werte nicht im Array stehen (in_array Fehler

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Punkteberechnung obwohl zwei Werte nicht im Array stehen (in_array Fehler

    Habe folgendes Problem:
    ich vergleiche mit meinem Scriptteil schrittweise zwei Werte.
    Das script soll mir nun eigentlich sagen wie die tatsächliche Differenz zu den beiden Werten ist.
    Macht es ja auch soweit ganz gut, nur beim letzten Wert gibt er mir eine Differenz aus, obwohl es nicht sein dürfte, da die beiden Werte nicht in dem array stehen.

    Hab ich da irgendwo einen Gedankenfehler drin ?

    hier mal das Script:

    PHP-Code:
    <?
            $p_tipps[0]= "Alf";
            $p_tipps[1]= "Hanne";
            $p_tipps[2]= "Julian";
            $p_tipps[3]= "Maria";

            $p_erg[0] = "Alf";
            $p_erg[1] = "Julian";
            $p_erg[2] = "Hanne";
            $p_erg[3] = "Georg";
        
    for ($i=0;$i<4;$i++)
                {
                    $j=$i+1;
                    
                    if ($p_tipps[$i]==$p_erg[$i]) {
                        $rpunkte = $rpunkte +10;
                        }
                    elseif (in_array($p_tipps[$i], $p_erg)){
                            if ($j==1)
                                if ($j<1)
                                    $differenz=1-$j;
                                if ($j>1)
                                    $differenz=$j-1;
                            if ($j==2)
                                if ($j<2)
                                    $differenz=2-$j;
                                if ($j>2)
                                    $differenz=$j-2;
                            if ($j==3)
                                if ($j<3)
                                    $differenz=3-$j;
                                if ($j>3)
                                    $differenz=$j-3;
                            if ($j==4)
                                if ($j<4)
                                    $differenz=4-$j;
                                if ($j>4)
                                    $differenz=$j-4;
                            $rpunkte=10-$differenz;}
                        else {$rpunkte=$rpunkte+0;}    
                        
                        
                    echo ("Pos. ".$j." - Differenz : ".$differenz." - Punkte : ".$rpunkte."<br>");
                            


                } 
    return $rpunkte+$rpunkte;
        
    ?>
    und hier das ausgegebene Ergebnis:

    Code:
    Pos. 1 - Differenz : - Punkte : 10
    Pos. 2 - Differenz : 1 - Punkte : 9
    Pos. 3 - Differenz : 1 - Punkte : 9
    Pos. 4 - Differenz : 1 - Punkte : 9
    Pos. 4 Müsste aber 0 Punkte ergeben, da es ja ein wert ist der nicht mit einem anderen übereinstimmt

    Danke schon mal für eure Hilfe...

    ...Comanchero


  • #2
    und du bist sicher, daß das tut, was es soll?

    PHP-Code:
                        if ($j==1)
                                if (
    $j<1)
                                    
    $differenz=1-$j;
                                if (
    $j>1)
                                    
    $differenz=$j-1

    Kommentar


    • #3
      Nein, eigentlich nicht, ich dachte eben das es der richtige Weg ist, aber offensichtlich ist er es nicht.

      Aber wie bekomme ich das dann richtig hin ?

      Kommentar


      • #4
        Welch perfektes Beispiel dafür, dass man doch lieber {} verwenden sollte.
        Die ganzen if-Bedingungen sind zudem unlogisch, wie Harry_X schon bemerkt hat. Geh' mal den Code im Kopf durch...
        Es ist schon alles gesagt! Nur noch nicht von allen! (Karl Valentin)
        Wenn du eine weise Antwort verlangst, musst du vernünftig fragen. (Johann Wolfgang von Goethe)

        Kommentar


        • #5
          http://www.php.de/php-einsteiger/464...verwenden.html
          --

          „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


          • #6
            Ok, habe es nun (glaube ich zumindest) was das berechnen angeht richtig.
            Das habe ich nun wie folgt berechnet:

            PHP-Code:
            <?
                    $p_tipps[0]= "Alf";
                    $p_tipps[1]= "Hanne";
                    $p_tipps[2]= "Julian";
                    $p_tipps[3]= "Maria";

                    $p_erg[0] = "Alf";
                    $p_erg[1] = "Julian";
                    $p_erg[2] = "Georg";
                    $p_erg[3] = "Hanne";
                
            for ($i=0;$i<4;$i++)
                        {
                            $j=$i+1;
                            if ($p_tipps[$i]==$p_erg[$i]) {
                                $rpunkte = $rpunkte +10;
                                }
                            elseif (in_array($p_tipps[$i], $p_erg)){
                                    if ($p_tipps[$i]==$p_erg[0]){
                                        if ($j<1){
                                            $differenz=1-$j;
                                            }
                                        else { $differenz=$j-1; }}    
                                    if ($p_tipps[$i]==$p_erg[1]){
                                        if ($j<2){
                                            $differenz=2-$j;
                                            }
                                        else { $differenz=$j-2; }}
                                    if ($p_tipps[$i]==$p_erg[2]){
                                        if ($j<3){
                                            $differenz=3-$j;
                                            }
                                        else { $differenz=$j-3; }}
                                    if ($p_tipps[$i]==$p_erg[3]){
                                        if ($j<4){
                                            $differenz=4-$j;
                                            }
                                        else { $differenz=$j-4; }}
                                    $rpunkte=10-$differenz;}
                                else {$rpunkte=$rpunkte+0;}    
                                
                                
                            echo ("Pos. ".$j." - Differenz : ".$differenz." - Punkte : ".$rpunkte."<br>");
                                    


                        } 
            return $rpunkte+$rpunkte;
                
            ?>
            Aber das Problem mit der Pos. 4 habe ich immer noch.
            $p_erg[3] befindet sich doch gar nicht im array $p_tipps oder andersrum
            Wie bekomme ich das richtig hin ?

            @nikosch: wie soll ich es denn noch aussagekräftiger machen als mein Titel ? Kann ja nicht das ganze Problem in die eine Zeile packen
            Aber Sorry, werde es mir für das nächste mal merken.

            Kommentar


            • #7
              Nein, das machst Du bitte jetzt. Vgl. Forum.
              --

              „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


              • #8
                So, Titel geändert !

                Nun aber weiter im Text.
                Was ist bei meiner (in_array(..... falsch ?
                Oder muss ich da einen ganz anderen Befehl verwenden ?

                Kommentar


                • #9
                  Ganz ehrlich - Dein Code ist Mist. Vielleicht beschreibst DU liber mal das Ziel, das Du erreichen willst. Was sind das für Punkte, wie ist die Logik für die Differenzen.

                  Hat das damit zu tun? Dann steht die Lösung dort in Posting #4.

                  Grundlegend kann man schon mal sagen, dass die Punkte/Position im Key des Arrays zu codieren, eindeutig die falsche Entscheidung war.
                  --

                  „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


                  • #10
                    Vom Prinzip her hat es schon etwas mit meinem anderen Thread zu tun, jedoch ist bei diesem hier ja der code wesentlich anders.

                    Ziel ist aber nach wie vor die Distanz zwischen $p_tipps und $e_erg zu berechnen, was ich ja hinbekommen habe.
                    Das Problem in diesem Thread liegt aber wie beschrieben darin das (in_array(.... nicht richtig erkennt das der Wert gar nicht im Array steht.

                    Wenn ich das richtig verstanden habe stehen ja die vier namen im Array, und wenn er einen namen dort sucht der nicht drin steht kann doch gar kein wert zurückkommen, oder ?



                    PS: Das der Code mist ist weiss ich selber ja auch (ist auch nicht von mir selber(dann wäre er wohl noch schlechter)), und aus dem Grund will ich das Script ja auch etwas erweitern.

                    Kommentar


                    • #11
                      Vielleicht liegt hier der Fehler:
                      Code:
                      else {$rpunkte=$rpunkte+0;}
                      ?

                      Willst du $rpunkte dort nicht einfach nur auf 0 setzen?
                      http://hallophp.de

                      Kommentar


                      • #12
                        PS: Das der Code mist ist weiss ich selber ja auch (ist auch nicht von mir selber(dann wäre er wohl noch schlechter)), und aus dem Grund will ich das Script ja auch etwas erweitern.
                        Hast Du aber schön unauffälig ans Ende geschrieben. Ich frage mich allerdings, warum wir das Problem dann mit Dir diskutieren.

                        Bitte beachten: Forenrichtlinien
                        Sei sozial
                        Wir haben kein Interesse daran, Deine Skripte zu reparieren, da das sehr viel Zeit und Mühe kosten kann. Akzeptiere also, dass sich unsere Motivation eventuell von Deiner unterscheidet und wir daher nur Hilfe zur Selbsthilfe geben.
                        --

                        „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


                        • #13
                          so langsam versteh ich die Leute, die zb im Heise-forum immer auf php meckern.

                          Kommentar


                          • #14
                            Ich erwarte doch gar nicht das ihr das Script für mich umbaut !

                            Ich habe gefragt wo ich da den Fehler drin hab, und ob der Befehl in_array vielleicht der falsche befehl dafür ist.

                            Aber anstatt in 10 posts zu schreiben das der code so nicht funktioniert, was ich selber bereits gemerkt haben dürfte wäre ne klare Antwort für mich wesentlich hilfreicher.

                            Im Fortgeschrittenen-Board wäre das ja in Ordnung, aber im einsteiger wäre etwas mehr rücksicht auf Leute die eben keine Profis sind schon ganz nett.

                            Also wenn Ihr meine Frage nicht beantworten wollt, oder sie auch selber nicht beantworten könnt, dann sagt das einfach.



                            PS: Asipak DANKE für deine Hilfe !
                            Vielleicht liegt hier der Fehler:

                            Code:
                            else {$rpunkte=$rpunkte+0;}?

                            Willst du $rpunkte dort nicht einfach nur auf 0 setzen?
                            Habe das jetzt in else {$rpunkte=0;} geändert und jetzt geht es auch.

                            Danke nochmals !!!!!

                            Kommentar


                            • #15
                              Bekomme ich denn trotzdem eine Antwort auf meinen Beitrag?

                              Nebenbei bemerkt sollte es selbst für einen Anfänger möglich sein, Programmcode so zu formatieren, dass die Helfer hier im Board keinen Augenkrebs bekommen.
                              http://hallophp.de

                              Kommentar

                              Lädt...
                              X