【问题标题】:min and max in multidimensional-array多维数组中的最小值和最大值
【发布时间】:2011-05-28 17:20:39
【问题描述】:

您好,我正在尝试查找 x 和 y 的最小值和最大值,我如何才能发现这个最小值和最大值函数无法正常工作

$dataPoints = array(
 array('x' => 2343, 'y' => 4322),
  array('x' => 103, 'y' => 303 ),
  array('x' => 2345,'y' => 2321 ),
  array('x' => 310, 'y' => 2044 ),
  array('x' => 173, 'y' => 793 ),
  array('x' => 456, 'y' => 2675),
  array('x' => 24, 'y' => 819 ));

【问题讨论】:

    标签: php multidimensional-array


    【解决方案1】:

    我认为你必须编写自己的函数:

    <?php  
        function max_with_key($array, $key) {
            if (!is_array($array) || count($array) == 0) return false;
            $max = $array[0][$key];
            foreach($array as $a) {
                if($a[$key] > $max) {
                    $max = $a[$key];
                }
            }
            return $max;
        }
    
    
        $dataPoints = array(
         array('x' => 2343, 'y' => 4322),
          array('x' => 103, 'y' => 303 ),
          array('x' => 2345,'y' => 2321 ),
          array('x' => 310, 'y' => 2044 ),
          array('x' => 173, 'y' => 793 ),
          array('x' => 456, 'y' => 2675),
          array('x' => 24, 'y' => 819 ));
    
        $max_x = max_with_key($dataPoints, 'x');  //2343
        $max_y = max_with_key($dataPoints, 'y');  //4322
    ?>
    

    【讨论】:

    • 有什么方法可以获取具有最大值的数组,而不仅仅是最大值
    • 壮丽的。但是如果您也需要数组键,则需要更改 foreach 以包含键(数组的...因为否则逻辑警察会逮捕您),并像这样更改 if:$max[$logicpolice] = $a[$key];
    【解决方案2】:

    试试这样的:

    foreach($dataPoints as $point) {
        if (!isset($x) || $point['x'] > $x) {
            $x = $point['x'];
        }
        if (!isset($y) || $point['y'] > $y) {
            $y = $point['y'];
        }
    }
    

    【讨论】:

    • 记得添加 $x = array(); $y = 数组();在 foreach 之前。
    【解决方案3】:

    构建所需答案的示例代码

    foreach($dataPoints[0]['x'] as $x_val)
    {
    //write max min func for x values
    }
    
    foreach($dataPoints[0]['y'] as $y_val)
    {
    //write max min func for y values
    }
    

    【讨论】:

      【解决方案4】:
      //to find max use rsort() & for min :sort()
      //Below will return you the max 
      $dataPoints = array(
           array('x' => 2343, 'y' => 4322),
            array('x' => 103, 'y' => 7303 ),
            array('x' => 2345,'y' => 2321 ),
            array('x' => 310, 'y' => 2044 ),
            array('x' => 173, 'y' => 793 ),
            array('x' => 456, 'y' => 2675),
            array('x' => 24, 'y' => 819 ));
      
            foreach ($dataPoints as $key=>$value) {
              $x[$key] = $value['x'];
              $y[$key] = $value['y'];
            }
      rsort($x,SORT_DESC);
      rsort($y,SORT_DESC);
      
      echo $x[0];
      echo $y[0];
      

      【讨论】:

        【解决方案5】:

        我是下划线库的粉丝

        http://brianhaveri.github.com/Underscore.php/#max

        不是原生的,但会让你不用自己编写函数,以及许多其他函数:)

        哦,它变成了单线!

        例子:

        include_once 'underscore.php';
        
        $dataPoints = array(
            array('x' => 2343, 'y' => 4322),
            array('x' => 103, 'y' => 303 ),
            array('x' => 2345,'y' => 2321 ),
            array('x' => 310, 'y' => 2044 ),
            array('x' => 173, 'y' => 793 ),
            array('x' => 456, 'y' => 2675),
            array('x' => 24, 'y' => 819 )
        );
        
        
        __::max($dataPoints, function($item) { return $item['x']; });    // array('x' => 2345,'y' => 2321 )
        __::min($dataPoints, function($item) { return $item['y']; });    // array('x' => 103, 'y' => 303 ) 
        

        【讨论】:

          【解决方案6】:

          您可以为此使用 PHP 的 array_column() (PHP 5 >= 5.5.0):

          $min_x = min( array_column( $dataPoints, 'x' ) );
          $min_y = min( array_column( $dataPoints, 'y' ) );
          $max_x = max( array_column( $dataPoints, 'x' ) );
          $max_x = max( array_column( $dataPoints, 'y' ) );
          

          【讨论】:

            【解决方案7】:

            您可以通过组合array_column、min 和max 函数分别找到每列的最小值和最大值:

            $min_x = min(array_column($dataPoints, 'x'));
            $max_x = max(array_column($dataPoints, 'x'));
            $min_y = min(array_column($dataPoints, 'y'));
            $max_y = max(array_column($dataPoints, 'y'));
            

            【讨论】:

              【解决方案8】:

              如果您不知道数组的深度,并且您知道数组保存的最大值(或设置任意高数(SESSION 变量或任何其他),您可以尝试这个最小值:

              函数 get_Min_Multi_Array($array) { foreach ($array as $key => $key_value) {

                  is_array(($key_value)) ?  get_min_Multi_Array($key_value) : "";
              
                  if ($key_value < $_SESSION["min_array_value"] && $key_value != 0) {
              
                      $_SESSION["min_array_value"] = $key_value;
                  }
              }
              

              }

              【讨论】:

                猜你喜欢
                • 2017-03-16
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2016-01-31
                • 2017-09-28
                • 2021-12-03
                • 2016-06-21
                • 2021-07-30
                相关资源
                最近更新 更多