Das größste Array Value mit Key ausgeben

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • 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!

    Comment


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

      Comment


      • #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!

        Comment


        • #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.

          Comment


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

            Comment


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

              EDIT:
              zu laaaahm

              Comment


              • #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

                Comment

                Working...
                X