Das größste Array Value mit Key ausgeben

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

  • Das größste Array Value mit Key ausgeben

    Hallo,
    ich hab ein Array, jetzt würd ich gerne das größe arrayelement mit key und value ausgeben. Hab zwar geschafft das größste Value auszulesen aber irgendwie schaffe ich nicht das der Key daneben steht....

    Kann mir jemand auf die Sprünge helfen?

    PHP-Code:
    <?php
        $foo 
    = array(1,2,3,4,5,6,-4);
        
        function 
    array_max(array $array) {
            
    sort($arraySORT_NUMERIC);
            return 
    end($array);
        }    
        print 
    array_max($foo); //6
    ?>

  • #2
    Erstmal musst du dir überlegen, wie du zwei Werte als Rückgabewert einer Funktion bewerkstelligen willst. Ich mach das jetzt mal über ein Array mit 2 Elementen, ersteres ist der Schlüssel, zweiteres ist der Wert.

    Finden des Maximums durch Sortierung ist vom Aufwand schon mal nicht so clever. Dann ist sort nicht so gut, da dabei die Indizes neu vergeben werden. asort ist da besser.

    Mit deiner Lösung kämest du mit array_search an den Schlüssel.

    Ok, modifizieren wir deine Lösung mal ein wenig:
    PHP-Code:
    asort($arraySORT_NUMERIC);
    $max=end($array);
    $key=array_search($max$array); 
    Das wäre schon mal eine Lösung.

    Aber wie gesagt, sortieren zum Finden des Maximums ist nicht der beste Weg. Dann suchen wir einfach mal selbst in einer Schleife nach dem Maximum.
    PHP-Code:
    $max=-1;
    $key=-1;
    foreach(
    $array as $k=>$value) {
        if(
    $value>$max) {
            
    $max=$value;
            
    $key=$k;
        }

    Ich habe zum Testen mal die Zeiten gemessen. 10000 Durchläufe mit einem Array von 1000 Elementen. Da ist die erste Lösung mit 11.9147591591s dabei. Die foreach-Lösung benötigt 8.52801179886s. Ich habe noch einen Test mit einer for-Schleife gemacht, die Laufzeit ist mit 9.80442810059s sogar schlechter als bei der foreach-Schleife, ist also keine Lösung.
    So, was bleibt noch? PHPs max-Funktion akzeptiert auch ein Array als Parameter:
    PHP-Code:
    $max=max($array);
    $key=array_search($max$array); 
    Ein einfacher Zweizeiler. Und Laufzeit? 1.71920204163s, mit Abstand die beste Lösung!

    Kommentar


    • #3
      PHP-Code:
      arsort($arraySORT_NUMERIC);
      // reset($array); // direkt nach der Sortierung unnötig
      list($key,$value)=each($array); 
      Wir werden alle sterben

      Kommentar


      • #4
        Falls es interessiert: Combies Lösung ist langsamer als max+array_search. Sie braucht ungefähr so lange wie asort+end+array_search. Ebenso lange braucht auch
        PHP-Code:
        arsort($arraySORT_NUMERIC);
        $key key($array);
        $max current($array); 
        Es gilt also weiterhin: Sortieren sollte man unbedingt vermeiden!

        Kommentar


        • #5
          Dann wäre die beste Variante, diese hier:
          PHP-Code:
          $max=-1;
          $key=-1;
          foreach(
          $array as $k=>$value) {
              if(
          $value>$max) {
                  
          $max=$value;
                  
          $key=$k;
              }

          Da ich hier das sortieren vermeide, danke eigentlich genau das was ich haben wollte.

          Kommentar


          • #6
            Dann wäre die beste Variante, diese hier:
            Nöö..
            Zur Strafe den Thread 100 mal laut vorlesen.
            Wir werden alle sterben

            Kommentar


            • #7
              Dann wäre die beste Variante, diese hier:
              Nein, max+array_search, wie onemorenerd sogar noch mal bekräftigt hat.

              EDIT:
              zu laaaahm

              Kommentar


              • #8
                Original geschrieben von combie
                Nöö..
                Zur Strafe den Thread 100 mal laut vorlesen.
                Ok hab ihn noch einmal durchgelesen Hab onemorenerd falsch verstanden obwohl er meinte sortieren sollte man vermeiden

                Kommentar

                Lädt...
                X