6

hi i am trying to find min and max values of x and y how can i find this min and max functions is not working correctly

$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 ));

8 Answers8

11

You can use PHP's array_column() (PHP 5 >= 5.5.0) for this:

$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' ) );
Matt Sims
  • 553
  • 1
  • 5
  • 14
11

I thinik you will have to write your own function:

<?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
?>
Silver Light
  • 44,202
  • 36
  • 123
  • 164
  • Is there any method to get array with max value not just max value – Bugfixer Feb 21 '15 at 13:25
  • Magnificient. But in case you need the array key too, you need to change the foreach to include the key (of the array... because the logic police will arrest you otherwise), and change the if like this: `$max[$logicpolice] = $a[$key];` – kry Feb 21 '18 at 10:25
5

Try something like this:

foreach($dataPoints as $point) {
    if (!isset($x) || $point['x'] > $x) {
        $x = $point['x'];
    }
    if (!isset($y) || $point['y'] > $y) {
        $y = $point['y'];
    }
}
Spiny Norman
  • 8,277
  • 1
  • 30
  • 55
4

You can find individually the minimum and maximum values of each column by combining array_column, min and max functions:

$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'));
4

I'm a Fan of the Underscore Library

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

Not native but will save you from having write the function your self, plus many other functions :)

oh and it becomes a one-liner!

Example:

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 ) 
Dustin Woodard
  • 929
  • 9
  • 10
2
//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];
Angelin Nadar
  • 8,944
  • 10
  • 43
  • 53
0

Sample code to built your required answer

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
}
Mohan Ram
  • 8,345
  • 25
  • 81
  • 130
0

In case you don't know how deep the array goes, and you know the maximum value the array holds (or set an arbitrary high number (SESSION Variable or any other)you can try this for the minimum:

function 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;
    }
}

}