在二维数组中查找min/max
Find min/max in a two dimensional array
我有一个格式如下的数组:
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
只有 returns 他们键。我也试过 max(array_map("max", $data))
但只有 returns 452.25
.
我是否必须使用 foreach
并手动完成?
这是获取最小值和最大值的一种方法:
$min = min(array_column($array, 'Price'));
$max = max(array_column($array, 'Price'));
至 return 最小值和最大值的嵌套数组:
$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 >= array_column()
需要 5.5.0 或使用 PHP Implementation of 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()
。
我认为最好的方法(最简单的方法)是从数组中获取所有价格并存储在单独的数组中。
然后从新数组中提取最大值。
试试这个:
$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
我喜欢用 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']);
我有一个格式如下的数组:
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
只有 returns 他们键。我也试过 max(array_map("max", $data))
但只有 returns 452.25
.
我是否必须使用 foreach
并手动完成?
这是获取最小值和最大值的一种方法:
$min = min(array_column($array, 'Price'));
$max = max(array_column($array, 'Price'));
至 return 最小值和最大值的嵌套数组:
$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 >= array_column()
需要 5.5.0 或使用 PHP Implementation of 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()
。
我认为最好的方法(最简单的方法)是从数组中获取所有价格并存储在单独的数组中。
然后从新数组中提取最大值。
试试这个:
$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
我喜欢用 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']);