min and max in multidimensional-array

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

Here is Solutions:

We have many solutions to this problem, But we recommend you to use the first solution because it is tested & true solution that will 100% work for you.

Solution 1

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
?>

Solution 2

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

Solution 3

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'];
    }
}

Solution 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 ) 

Solution 5

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

Solution 6

//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];

Solution 7

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
}

Solution 8

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

}

Note: Use and implement solution 1 because this method fully tested our system.
Thank you 🙂

All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

Leave a Reply