привет, я пытаюсь найти минимальные и максимальные значения 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 }