Php 在嵌套数组中查找最小值
我有这样一个数组:Php 在嵌套数组中查找最小值,php,multidimensional-array,Php,Multidimensional Array,我有这样一个数组: Array ( [0] => Array ( [ID] => 85597 [DISTANCE] => 14916.204333483 ) [1] => Array ( [ID] => 85598 [DISTANCE] => 71.712470188284 ) [2] => Array ( [ID] => 8
Array
(
[0] => Array
(
[ID] => 85597
[DISTANCE] => 14916.204333483
)
[1] => Array
(
[ID] => 85598
[DISTANCE] => 71.712470188284
)
[2] => Array
(
[ID] => 85599
[DISTANCE] => 14130.470174227
)
[3] => Array
(
[ID] => 85600
[DISTANCE] => 14917.670508146
)
)
我想返回最低[距离]的[ID]
我尝试使用min(),但这似乎只是比较[ID]值
有什么想法吗?试试以下方法:
foreach($array as $a){
$newArray[$a['ID']] = $a['DISTANCE'];
}
$min = min(array_values($newArray));
function showId($least){
foreach($newArray as $i => $v){
if($least === $v){
return $i;
}
}
}
echo showId($min);
$min=PHP\u INT\u MAX;
foreach($array作为$value){
如果($value['DISTANCE']<$min){
$minId=$value['ID'];
$min=$value['DISTANCE'];
}
}
$minId
将是距离最短的id你认为这会让你快乐:-)
短版
function distanceSorter($a, $b) {
return $a['distance'] - $b['distance'];
}
usort($data, 'distanceSorter');
// if you really just want the lowest value
$lowestDistance = array_shift(usort($data, 'distanceSorter');
那么simple
foreach
呢?如果这些都是直接从数据库中获取的,那么使用它的查询语言来获取min,而不是php。。。你知道。。。如果…可能的副本会丢失它与ID的引用,我认为他想保留它:-)这被认真地标记为答案?:-)哦
$data = array(
array('id' => 1, 'distance' => rand(1,100000)),
array('id' => 2, 'distance' => rand(1,100000)),
array('id' => 3, 'distance' => rand(1,100000)),
array('id' => 4, 'distance' => rand(1,100000)),
array('id' => 5, 'distance' => rand(1,100000)),
array('id' => 6, 'distance' => rand(1,100000)),
array('id' => 7, 'distance' => rand(1,100000)),
array('id' => 8, 'distance' => rand(1,100000)),
);
echo "--raw data--\n";
var_dump($data);
function distanceSorter($a, $b) {
return $a['distance'] - $b['distance'];
}
usort($data, 'distanceSorter');
echo "--sorted data--\n";
var_dump($data);
echo "--grab first result ( lowest )--\n";
var_dump($data[0]);
GIVES
--raw data--
array(8) {
[0]=>
array(2) {
["id"]=>
int(1)
["distance"]=>
int(27573)
}
[1]=>
array(2) {
["id"]=>
int(2)
["distance"]=>
int(93357)
}
[2]=>
array(2) {
["id"]=>
int(3)
["distance"]=>
int(84515)
}
[3]=>
array(2) {
["id"]=>
int(4)
["distance"]=>
int(13666)
}
[4]=>
array(2) {
["id"]=>
int(5)
["distance"]=>
int(11810)
}
[5]=>
array(2) {
["id"]=>
int(6)
["distance"]=>
int(37548)
}
[6]=>
array(2) {
["id"]=>
int(7)
["distance"]=>
int(10705)
}
[7]=>
array(2) {
["id"]=>
int(8)
["distance"]=>
int(73548)
}
}
--sorted data--
array(8) {
[0]=>
array(2) {
["id"]=>
int(7)
["distance"]=>
int(10705)
}
[1]=>
array(2) {
["id"]=>
int(5)
["distance"]=>
int(11810)
}
[2]=>
array(2) {
["id"]=>
int(4)
["distance"]=>
int(13666)
}
[3]=>
array(2) {
["id"]=>
int(1)
["distance"]=>
int(27573)
}
[4]=>
array(2) {
["id"]=>
int(6)
["distance"]=>
int(37548)
}
[5]=>
array(2) {
["id"]=>
int(8)
["distance"]=>
int(73548)
}
[6]=>
array(2) {
["id"]=>
int(3)
["distance"]=>
int(84515)
}
[7]=>
array(2) {
["id"]=>
int(2)
["distance"]=>
int(93357)
}
}
--grab first result ( lowest )--
array(2) {
["id"]=>
int(7)
["distance"]=>
int(10705)
}
function distanceSorter($a, $b) {
return $a['distance'] - $b['distance'];
}
usort($data, 'distanceSorter');
// if you really just want the lowest value
$lowestDistance = array_shift(usort($data, 'distanceSorter');