【问题标题】:PHP Get Highest Value from ArrayPHP 从数组中获取最大值
【发布时间】:2011-10-04 08:12:05
【问题描述】:

我正在尝试获取数组中的最大值,同时仍保留项目标签。我知道我可以通过运行 sort() 来做到这一点,但如果我这样做了,我只会丢失标签——这对于我需要的东西来说毫无意义。这是数组:

array("a"=>1,"b"=>2,"c"=>4,"d"=>5);

有什么想法吗?

【问题讨论】:

    标签: php arrays sorting


    【解决方案1】:

    不要对数组进行排序以获得最大值。

    获取最大值:

    $value = max($array);
    

    获取对应的key:

    $key = array_search($value, $array);
    

    【讨论】:

    • 为什么不array_max()亲爱的php。 ? 请注意,如果您的值是字符串类型,则此函数不会返回 int。 (即使它们包含整数)。所以最好做 $value = (int) max($array);
    • 如果两个键的最大值相同,max($array) 将不起作用。
    • 你知道最大值,所以遍历数组以获取匹配的 ID
    【解决方案2】:

    如果您只想要数组中的最大值,请使用max 函数。这将返回最大值,尽管不是相应的键。它不会改变原始数组。

    如果你关心你可以做的钥匙

    $key = array_search(max($array), $array)
    

    (已编辑以包含@binaryLV 的建议)

    【讨论】:

    【解决方案3】:
    $a = array(10, 20, 52, 105, 56, 89, 96);
    $b = 0;
    foreach ($a as $key=>$val) {
        if ($val > $b) {
            $b = $val;
        }
    }
    echo $b;
    

    【讨论】:

      【解决方案4】:

      您正在寻找asort()

      【讨论】:

      • 如果您不需要对整个数组进行排序,显然可以使用众多其他答案之一;)但提到 sort() 让我觉得您的问题表述错误。
      • Jacob 是对的 - 进行排序会将数组从最低到最高维护键重新排序...然后执行 foreach 并且其中的 $key=>$value 将在foreach 完成..所以你在那里有最高的 - 键和值...
      • 如果我们使用 sort() 或 asort() 可能会导致 n 个节点的时间复杂度
      【解决方案5】:

      您可以使用max() 来获取最大值,但它只会返回一个没有相应数组索引的值。然后,您可以使用array_search() 找到相应的密钥。

      $array = array("a"=>1,"b"=>2,"c"=>4,"d"=>5);
      $maxValue = max($array);
      $maxIndex = array_search(max($array), $array);
      var_dump($maxValue, $maxIndex);
      

      输出:

      int 5
      string 'd' (length=1)
      

      如果有多个元素具有相同的值,则必须遍历数组以获取所有键。

      在不知道问题的情况下很难提出好的建议。你为什么需要它?什么是输入,什么是期望的输出?

      【讨论】:

        【解决方案6】:

        试试看。

        $data = array("a"=>1,"b"=>2,"c"=>4,"d"=>5); $maxKey = current(array_keys($data, max($data))); var_dump($maxKey);

        【讨论】:

        • 欢迎来到 Stack Overflow。已有 15 个答案的 8 年老问题需要的不仅仅是代码答案。指出您的答案所针对的问题的哪些新方面非常重要。所有答案通常都可以从解释它们的工作原理和原因中受益。
        【解决方案7】:
        // assuming positive numbers
        
        $highest_key;
        $highest_value = 0;
        foreach ($array as $key => $value) {
            if ($value > $highest_value) {
                $highest_key = $key;
            }
        }
        
        // $highest_key holds the highest value
        

        【讨论】:

          【解决方案8】:
          $abc=array("a"=>1,"b"=>2,"c"=>4,"e"=>7,"d"=>5);
          /*program to find max value*/
          $lagest = array();
          $i=0;
          foreach($abc as $key=>$a) {
              if($i==0) $b=$a;
              if($b<$a) {
                  $b=$a;
                  $k=$key;
              }
              $i++;
           }
           $lagest[$k]=$b;
           print_r($lagest);
          

          【讨论】:

            【解决方案9】:
            <?php 
            $array = array("a"=>1,"b"=>2,"c"=>4,"d"=>5); 
            
            foreach ($array as $key => $value) {
               if ($value >= $max) 
                $max = $key;     
            }
            echo " The array in largest number :".$max."<br/>";
            ?> 
            

            【讨论】:

              【解决方案10】:

              您需要使用 ksort(数组("a"=>1,"b"=>2,"c"=>4,"d"=>5)); 欲了解更多信息:http://www.w3schools.com/php/php_arrays_sort.asp

              【讨论】:

                【解决方案11】:

                greatestValue=>试试这个很容易

                $a=array(10,20,52,105,56,89,96);
                $c=0;
                foreach($a as $b)
                {
                if($b>$c)
                $c=$b;
                
                }
                echo $c;
                

                【讨论】:

                  【解决方案12】:

                  找出最大的数,包括负数:

                  return max([abs(max($array)),abs(min($array))]);
                  

                  【讨论】:

                    【解决方案13】:
                    $ee = array('a' => 50, 'b' => 25, 'c' => 5, 'd' => 80, 'e' => 40, 'f' => 152, 'g' => 45, 'h' => 28);
                    $Acurr = '';
                    $Amax = 0;
                    
                    foreach($ee as $key => $value) {
                        $Acurr = $value;    
                    
                        if($Acurr >= $Amax) {
                            $Amax = $Acurr; 
                        }
                    }
                    
                    echo "greatest number is $Amax";
                    

                    【讨论】:

                      【解决方案14】:

                      这是一个练习中的解决方案:

                      function high($sentence)
                      {
                          $alphabet = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'ñ', 'o', 'p', 'q', 'r', 't', 'u', 'v', 'w', 'x', 'y', 'z'];
                          $alphabet = array_flip($alphabet);
                      
                          $words = explode(" ", $sentence);
                      
                          foreach ($words as $word) {
                              $letters = str_split($word);
                              $points = 0;
                              foreach ($letters as $letter)
                                  $points += $alphabet[$letter];
                              $score[$word] = $points;
                          }
                      
                          $value = max($score);
                          $key = array_search($value, $score);
                      
                          return $key;
                      }
                      
                      echo high("what time are we climbing up the volcano");
                      

                      【讨论】:

                        【解决方案15】:

                        asort() 是要走的路:

                        $array = array("a"=>1,"b"=>2,"c"=>4,"d"=>5);
                        asort($array);
                        $highestValue       = end($array);
                        $keyForHighestValue = key($array);
                        

                        【讨论】:

                          【解决方案16】:

                          尝试使用asort()

                          来自文档:

                          asort - 对数组进行排序并保持索引关联

                          说明:

                          bool asort ( array &$array [, int $sort_flags = SORT_REGULAR ] )
                          

                          此函数对数组进行排序,以使数组索引保持其 与它们关联的数组元素的相关性。这是 主要用于对实际元素所在的关联数组进行排序时 顺序很重要。

                          【讨论】:

                          • 你提出的不同之处是什么?
                          猜你喜欢
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          • 2011-08-16
                          • 2019-09-19
                          • 1970-01-01
                          • 2021-01-21
                          • 1970-01-01
                          • 2018-04-28
                          相关资源
                          最近更新 更多