2010-12-21 19 views
5

हाय मैं मिनट और कैसे मैं इस न्यूनतम और अधिकतम कार्यों पा सकते हैं x और y की अधिकतम मूल्यों खोजने की कोशिश कर रहा हूँ सही ढंग से काम नहीं कर रहा हैमिनट और बहुआयामी सरणी में अधिकतम

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

उत्तर

11

मैं thinik आप करना होगा इस तरह

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

मैं अधिकतम मूल्य के साथ सरणी प्राप्त करने के लिए कोई विधि है, केवल अधिकतम मान – Bugfixer

+0

शानदार नहीं है। लेकिन यदि आपको सरणी कुंजी की भी आवश्यकता है, तो आपको कुंजी (सरणी का ... शामिल करने के लिए फ़ोरैच को बदलने की आवश्यकता है ... क्योंकि तर्क पुलिस आपको अन्यथा गिरफ्तार करेगी), और इस तरह से बदलें: '$ max [$ logicpolice ] = $ एक [$ कुंजी]; ' – kry

5

कोशिश कुछ:

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

याद रखें $ x = array(); $ y = सरणी(); foreach से पहले। –

0

नमूना सह अपने खुद के समारोह लिखने डे अपने आवश्यक जवाब

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

बनाया करने के लिए मैं अंडरस्कोर लाइब्रेरी

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

आप इस के लिए 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')); 
1

आप पा सकते हैं व्यक्तिगत रूप से न्यूनतम और प्रत्येक स्तंभ की अधिकतम मान संयोजन 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')); 
संबंधित मुद्दे