Найти мин / макс в двумерном массиве

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

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 а делать это вручную?

3

Решение

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

$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 ().

С помощью array_map() чтобы получить только минимум и максимум:

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

Там, наверное, хороший array_filter() или же array_reduce() также.

12

Другие решения

Мне нравится использовать 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= 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']);
1

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

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

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

$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

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector