2010-12-21 40 views
5

hola yo estoy tratando de encontrar valores mínimo y máximo de x e y cómo puedo encontrar a este mínimo y máximo funciones no está funcionando correctamentemínimo y máximo en multidimensional array

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

Respuesta

11

I thinik tendrá que escribir su propia función:

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

I s hay algún método para obtener la matriz con el valor máximo no solo el valor máximo – Bugfixer

+0

Magnífico. Pero en caso de que necesite la clave de matriz también, debe cambiar el foreach para incluir la clave (de la matriz ... porque de lo contrario la policía lógica lo arrestará), y cambie la opción si así: '$ max [$ logicpolice ] = $ a [$ key]; ' – kry

5

intentar algo como esto:

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

recordar agregar $ x = array(); $ y = array(); antes de foreach. –

0

muestra cO de que construye su respuesta requerida

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

Soy un fan de la Biblioteca subrayado

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

no nativa, pero te salvará de tener la función de escribir su propia , además de muchas otras funciones :)

¡oh, y se convierte en un trazador de líneas!

Ejemplo:

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

Puede utilizar PHP array_column() (PHP 5> = 5.5.0) para esto:

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

Usted puede encontrar de forma individual los valores máximos de cada columna de mínimo y combinando array_column, min y max funciones:

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