min и max в многомерном массиве

привет, я пытаюсь найти минимальные и максимальные значения x и y, как я могу найти, что эта функция min и 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 )); 

Мне нужно будет написать свою собственную функцию:

 <?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($dataPoints as $point) { if (!isset($x) || $point['x'] > $x) { $x = $point['x']; } if (!isset($y) || $point['y'] > $y) { $y = $point['y']; } } 

Я поклонник библиотеки подчёркивания

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 ) 

Вы можете использовать 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' ) ); 
 //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]; 

Вы можете найти индивидуально минимальное и максимальное значения каждого столбца, объединив функции 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')); 

Пример кода для создания требуемого ответа

 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 }