Найти min / max в двухмерном массиве

У меня есть массив со следующим форматом:

Array ( [0] => Array ( [DateTime] => "2013-05-22 14:21:01" [Price] => 102.01 ) [1] => Array ( [DateTime] => "2013-05-23 15:55:01" [Price] => 52.60 ) [2] => Array ( [DateTime] => "2013-05-25 14:23:01" [Price] => 452.25 ) ... etc ) 

Мне нужно узнать самое низкое и самое высокое значение Price .

min возвращает только ключ. Я также пробовал max(array_map("max", $data)) но это возвращает 452.25 .

Должен ли я использовать foreach и делать это вручную?

    Вот один из способов получить значения min и max:

     $min = min(array_column($array, 'Price')); $max = max(array_column($array, 'Price')); 

    Чтобы вернуть вложенный массив для min и max:

     $prices = array_column($array, 'Price'); $min_array = $array[array_search(min($prices), $prices)]; $max_array = $array[array_search(max($prices), $prices)]; 

    И вы можете делать каждый в одной строке, так как это выглядело так, как вы делали:

     $min_array = $array[array_search(min($prices = array_column($array, 'Price')), $prices)]; $max_array = $array[array_search(max($prices = array_column($array, 'Price')), $prices)]; 

    PHP> = 5.5.0, необходимый для array_column() или использовать реализацию PHP array_column () .

    Используя just array_map() чтобы получить только min и max:

     $min = min(array_map(function($a) { return $a['Price']; }, $array)); $max = max(array_map(function($a) { return $a['Price']; }, $array)); 

    Вероятно, есть хороший array_filter() или array_reduce() .

    Мне нравится использовать array_reduce ()

     $a[]=array('name'=>'kokopiko','price'=>34); $a[]=array('name'=>'kokospiko2','price'=>234); $a[]=array('name'=>'kokospiko3','price'=>4); $minmax = array_reduce($a, function($result, $item) { if (!isset($result['min'])) { $result['min']=$item; } if ($result['min']['price'] > $item['price']) { $result['min']=$item; } if (!isset($result['max'])) { $result['max']=$item; } if ($result['max']['price'] < $item['price']) { $result['max']=$item; } return $result; }); var_dump($minmax); 

    более короткая версия

     $a[]=array('name'=>'kokopiko','price'=>34); $a[]=array('name'=>'kokospiko2','price'=>234); $a[]=array('name'=>'kokospiko3','price'=>4); $init=array('min'=>$a[0],'max'=>$a[0]); $minmax = array_reduce($a, function($result, $item) { ($result['min']['price'] < $item['price'])?:$result['min']=$item; ($result['max']['price'] > $item['price'])?:$result['max']=$item; return $result; }, $init); 

    Только значения min / max (не связанные элементы массива

     $min= array_reduce($a, function($result, $item) {return min($result, $item['price']);}, $a[0]['price']); $max= array_reduce($a, function($result, $item) {return max($result, $item['price']);}, $a[0]['price']); 

    Я думаю, что лучший способ (самый простой способ) – получить все цены от вашего массива и хранить в отдельных массивах.

    Затем вы извлекаете максимальное значение из нового массива.

    Попробуй это:

     $myarray = array ( array( "DateTime" => "2013-05-22 14:21:01", "Price" => 102.01), array( "DateTime" => "2013-05-23 15:55:01", "Price" => 52.60), array( "DateTime" => "2013-05-25 14:23:01", "Price" => 452.25) ); //$key is index of $myarray and $value is one of subarrays //declare a new array to store all prices $all_price = array(); foreach ($myarray as $key => $value) { //get only "Price" from each row of array (discard "DateTime") $all_price[] = $value["Price"]; } //$all_price cointains now all prices and you can get min and max $min = min($all_price); $max = max($all_price); echo("Min: ".$min."<br />"); echo("Max: ".$max."<br />"); 

    Скопируйте и вставьте этот код в http://www.writephponline.com/, чтобы увидеть результат! : D

    Работает также на PHP ниже 5.5.0