[英]how to get maximum value from array php
我如何從下面的數組獲得最大距離? 當我嘗試print_r($ data)時,我得到以下輸出:
Array
(
[0] => Array
(
[distance] => 1.7 km
[time] => 3 mins
[distance_value] => 1720
[time_value] => 192
)
[1] => Array
(
[distance] => 4.2 km
[time] => 10 mins
[distance_value] => 4207
[time_value] => 587
)
)
我想回聲4.2 km,因為它是陣列中的最大距離。
foreach ($delivery as $key => $value) {
if($key==0) {
$mysource = $pickup;
} else {
$mysource = $delivery[$key-1];
}
$data[$key] = $this->GetDrivingDistance($mysource,$value);
if(!empty($data[$key])) {
$dist += max($data[$key]['distance']);
}
}
echo $dist; exit();
print_r($data); exit();
您可以使用內置函數:
echo max(array_map('floatval',array_column($array, "distance")))." km";
說明:
array_column
將數組轉換為一維 array_map
對字符串進行浮點運算。 這很重要,因為您的字符串比較錯誤地比較了兩個數字。 應用浮動功能后,您的km
將被刪除,因此請稍后追加。 字符串示例:
11.7小於4.2,因為它比較第一個字符並按1,2,3排列...
輸出:
4.2 km
注意:如果所有值均以km
為單位,則以其他單位為單位,這也是合適的!
<?php
$array = array
(
array
(
"distance" => "1.7 km",
"time" => "3 mins",
"distance_value" => 1720,
"time_value" => 192,
),
array
(
"distance" => "4.2 km",
"time" => "10 mins",
"distance_value" => 4207,
"time_value" => 587,
)
);
$distance = [];
$i = 0;
foreach ($array as $distance_data) {
$distance[] = (float)$distance_data["distance"];
$i++;
}
$max_distnace = max($distance);
var_dump($max_distnace);
您可以先按距離對數組進行排序,然后獲得所需的數組:
$myArray =
array (
array
(
'distance' => '1.7 km',
'time' => '3 mins',
'distance_value' => 1720,
'time_value' => 192,
),
array
(
'distance' => '4.2 km',
'time' => '10 mins',
'distance_value' => 4207,
'time_value' => 587,
)
);
usort($myArray,function($a, $b) {
return $b['distance_value'] - $a['distance_value'];
});
$maxDistance = $myArray[0];
echo $maxDistance['distance'];
// 4.2 km
我從下面的代碼中獲取解決方案。
foreach ($delivery as $key => $value) {
if($key==0){
$mysource = $pickup;
}else{
$mysource = $delivery[$key-1];
}
$data[$key] = $this->GetDrivingDistance($mysource,$value);
if(!empty($data[$key])){
$max = '-9999999 km'; //will hold max val
$found_item = null; //will hold item with max val;
foreach($data as $k=>$v)
{
if($v['distance']>$max)
{
$max = $v['distance'];
$found_item = $v;
}
}
}
}
$dist = $max;
Thamilan的回答是最好的,但你使用CakePHP你也可以使用Hash::extract()
如果array_column()
是你無法使用( 即你正在使用PHP的舊版本),或者如果您需要借助Hash
實用程序的路徑語法,可以使用具有更深關聯的數組:
echo max(array_map('floatval', Hash::extract($array, 'distance'))) . ' km';
在這里, Hash::extract()
就像array_column()
一樣工作,並將您的數組轉換為一維數組。
確實,這個問題是用CakePHP標記的,盡管我會使用CakePHP Collection類給出解決方案:
use Cake\Collection\Collection;
(new Collection($data))->sortBy('distance_value')->first()['distance'];
請注意,CakePHP具有實用程序功能collection
,可以縮短此時間:
collection($data)->sortBy('distance_value')->first()['distance']
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.