Ankündigung

Einklappen
Keine Ankündigung bisher.

[erledigt]array_keys() gibt nur einen key zurück, obwohl 2 vorhanden

Einklappen

Neue Werbung 2019

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

  • [erledigt]array_keys() gibt nur einen key zurück, obwohl 2 vorhanden

    guten tag zusammen...
    ich möchte, wenn mehr als ein wert vorhanden, die keys mit dem höchsten wert aus einem array ausgeben lassen, daher:

    PHP-Code:
     if(count( ${"dif_array_sorted".($l)}) > 1) {  
             ${
    "TS_ID_array".($l)} = array_keys(${"dif_array_sorted".($l)}, max(${"dif_array_sorted".($l)})); 
         } 
    aber ich bekomme nur einen key zurück, obwohl zwei mit dem selben wert vorhanden sind:
    PHP-Code:

            
    if(count( ${"dif_array_sorted".($l)}) > 1) { 
     
                
    var_dump(   ${"dif_array_sorted".($l)});
                echo 
    '   max: '.max(${"dif_array_sorted".($l)}).'<br>'
     
                ${
    "TS_ID_array".($l)} = array_keys(${"dif_array_sorted".($l)}, max( ${"dif_array_sorted".($l)})); 

                
    var_dump(${"TS_ID_array".($l)})  
    }

    //ergibt:
    //array(2) { [1]=>  float(108.2) [3]=>  float(108.2) } max: 108.2
    //array(1) { [0]=> int(1) } 
    versteh ich nich..
    verbindet max() den wert mit dem key?
    hab ich irgendwas anderes grundsätzlich nicht verstanden?


    ich bin blutiger anfänger und vermutlich ist es was lächerlich simples, aber ich find den fehler nicht....
    vielen dank schonmal im vorraus..jan

  • #2
    array_keys verwendest du schon richtig. Prüfe doch einmal ob die beiden float-Werte wirklich gleich sind:

    PHP-Code:
    var_dump(${'dif_array_sorted' $l}[1] == ${'dif_array_sorted' $l}[3]); 
    (btw: wie du siehst, musst du atomare Ausdrücke nicht auch noch mit runden Klammern versehen)
    [IMG]https://g.twimg.com/twitter-bird-16x16.png[/IMG][URL="https://twitter.com/fschmengler"]@fschmengler[/URL] - [IMG]https://i.stack.imgur.com/qh235.png[/IMG][URL="https://stackoverflow.com/users/664108/fschmengler"]@fschmengler[/URL] - [IMG]http://i.imgur.com/ZEqflLv.png[/IMG] [URL="https://github.com/schmengler/"]@schmengler[/URL]
    [URL="http://www.schmengler-se.de/"]PHP Blog[/URL] - [URL="http://www.schmengler-se.de/magento-entwicklung/"]Magento Entwicklung[/URL] - [URL="http://www.css3d.net/"]CSS Ribbon Generator[/URL]

    Kommentar


    • #3
      ${"TS_ID_array".($l)}
      Nicht Dein Ernst! Wer soll diesen Sch... analysieren?!
      [COLOR="#F5F5FF"]--[/COLOR]
      [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
      „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
      [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
      [COLOR="#F5F5FF"]
      --[/COLOR]

      Kommentar


      • #4
        max() bestimmt einen Maximalwert aus einer Reihe von Werten - und davon kann es per Definition immer nur genau einen geben!
        (Um neues Maximum zu werden, muss ein Wert größer sein als der Vergleichswert - Gleichheit reicht nicht aus)
        Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

        Kommentar


        • #5
          danke für die schnellen antworten...

          @fab:
          eigenartig, ich (wie gesagt, bekackter amateur) wußte nicht das eine variable mehr eigenschaften hat als in dem fall float und den wert.
          PHP-Code:
          var_dump(${'dif_array_sorted' $l}[1] == ${'dif_array_sorted' $l}[3]); 
          //ergibt
          //bool(false) 
          wo liegt der unterschied?
          kann man tiefer in eine variable reingucken als mit var_dump()?

          @nikosch:
          weiss ja nich, was wichtig sein könnte, ´noob halt. deswegen hab ich alles mitreingerummelt. also im endeffekt läuft es auf
          PHP-Code:
           if(count$array1 1) { 
           
                      
          var_dump($array_1);
                      echo 
          '   max: '.max($array_1).'<br>'
           
                      
          $array_2 array_keys($array_1max($array_1); 

                      
          var_dump($array_2)  

          //ergibt:
          //array(2) { [1]=>  float(108.2) [3]=>  float(108.2) } max: 108.2
          //array(1) { [0]=> int(1) } 
          hinaus.


          @lstegelitz:
          das wäre eine erklärung...

          zumal ich ja gerade feststelle, das die variablen noch nicht mal gleich sind, obwohl sie aus den gleichen daten einer xml-datei in einer schleife entstehen...

          Kommentar


          • #6
            Die Aussage schloss Dich durchaus mit ein. Wer solchen Quälcode baut, braucht sich doch nicht zu wundern, wenn er hinterher nicht mehr durchsieht.
            [COLOR="#F5F5FF"]--[/COLOR]
            [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
            „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
            [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
            [COLOR="#F5F5FF"]
            --[/COLOR]

            Kommentar


            • #7
              nikosch:
              keine absicht...
              meine ersten php scripte, ich kanns noch nich besser...

              Kommentar


              • #8
                ok, problem gelöst...

                das war wohl ein fließkommagenauigkeitsproblem.aus der manual:
                Fließkommagenauigkeit

                Es ist typisch das einfache Dezimalbrüche wie 0.1 oder 0.7 nicht ohne kleine Ungenauigkeiten in ihr internes binäres Gegenstück umgewandelt werden können. Dies kann zu verwirrenden Ergebnissen führen, so ergibt floor((0.1+0.7)*10) in der Regel 7 an Stelle der der erwarteten 8 da die interne Repräsentation eher bei 7.9 liegt.

                Dies liegt daran das es unmöglich ist bestimmte Werte mit einer endlichen Anzahl von Nachkommenstellen darzustellen. So wird zum Beispiel 1/3 im Dezimalsystem 0.3.
                ich runde jetzt die (float)$variable auf 2 kommastellen:
                PHP-Code:
                 if(count$array1 1) { 
                 
                            
                var_dump($array_1);
                            echo 
                '   max: '.max($array_1).'<br>';
                //ergibt immer noch:
                //array(2) { [1]=>  float(108.2) [3]=>  float(108.2) } max: 108.2
                           
                            
                         
                           
                $max max($array_1);
                           
                $maxround round($max,2);

                           
                $array_2 array_keys($array_1$maxround); 




                //allerdings ergibt jetzt
                            
                var_dump($array_1
                //array(2) { [0]=> int(1) [1]=>int(3) }  
                //und somit 
                var_dump($array_2[1] == $array_2[3]); 
                // = bool(true);

                trotz quälcode...

                danke euch

                Kommentar

                Lädt...
                X