【问题标题】:php or any program languagephp 或任何程序语言
【发布时间】:2011-02-24 14:32:59
【问题描述】:

嗨,任何人都可以帮助我找到下面给出的数组的最大值。我希望 650 的结果是最大值....

$my_array = array(array(128,300,140)10,15,array(130,array(500,650))); 

【问题讨论】:

    标签: php multidimensional-array max


    【解决方案1】:

    在这里,在 3 行可读的代码中使用 RecursiveArrayIterator

    $it = new RecursiveIteratorIterator(new RecursiveArrayIterator($array));
    $flattenedArray = iterator_to_array($it);
    $max = max($flattenedArray);
    

    或者,如果您不想展平(和复制),但更喜欢迭代(使用更少的内存,但速度更慢):

    $it = new RecursiveIteratorIterator(new RecursiveArrayIterator($array));
    $max = 0;
    foreach ($it as $value) {
        $max = max($value, $max);
    }
    

    【讨论】:

      【解决方案2】:

      将数组展平,然后在其上调用max()。在您的示例中,max() 的返回值应该是 650。

      【讨论】:

        【解决方案3】:

        也有可能

        $data = array(array(128,300,140),10,15,array(130,array(500,650)));
        $max = 0;
        array_walk_recursive(
            $data,
            function($val) use (&$max) {
                if($val > $max) $max = $val;
            }
        );
        echo $max; // 650
        

        【讨论】:

          【解决方案4】:

          您也可以递归地执行此操作,如果项目是一个数组,请再次调用该函数以从该数组中返回最大项目。

          最后,您应该始终拥有最大项目,然后在最后一次迭代中,您可以从这些结果中调用最大值。

          【讨论】:

            【解决方案5】:

            这就是诀窍:

            function flatten($ar) {
                $toflat = array($ar);
                $res = array();
                while (($r = array_shift($toflat)) !== NULL) {
                    foreach ($r as $v) {
                        if (is_array($v)) {
                            $toflat[] = $v;
                        } else {
                            $res[] = $v;
                        }
                    }
                }
                return $res;
            }
            
            $arr = array(array(128,300,140),10,15,array(130,array(500,650)));
            echo max(array_flatten($arr));
            

            编辑:使用How to "flatten" a multi-dimensional array to simple one in PHP? 更新扁平数组

            【讨论】:

              【解决方案6】:
              <?php
              $my_array = array(array(128,300,140),10,15,array(130,array(500,650)));
              
              function findLargest($arr) {
                  $largest = 0;
                  foreach ($arr as $item) {
                      if (is_array($item)) {
                          $item = findLargest($item);
                      }
                      if ($item > $largest) {
                          $largest = $item;
                      }
                  }
                  return $largest;
              }
              
              echo "Largest is ".findLargest($my_array)."\n";
              
              ?>
              

              【讨论】:

                【解决方案7】:
                function maximum($in)
                {
                  if (!is_array($in)) $max = $in;
                  else foreach ($in as $element) 
                  {
                    $elementMax = maximum($element);
                    if (isset($max)) $max = max($elementMax, $max); else $max = $elementMax;
                  }
                
                  return $max;
                }
                

                【讨论】:

                  猜你喜欢
                  • 2013-03-31
                  • 1970-01-01
                  • 1970-01-01
                  • 2020-01-05
                  • 2014-11-20
                  • 2012-03-31
                  • 2012-02-05
                  • 2010-09-20
                  • 2012-06-20
                  相关资源
                  最近更新 更多