簡體   English   中英

如何從數組php獲取最大值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM