簡體   English   中英

如何在多維數組中獲取最大值和最小值

[英]How to get max and min value in a multidimensional array

我有這個數組:

array(8) {
  [0]=>
  array(2) {
    ["ticket_type"]=>
    string(9) "normal"
    ["ticket_price"]=>
    string(5) "82.00"
  }
  [1]=>
  array(2) {
    ["ticket_type"]=>
    string(9) "cheaper"
    ["ticket_price"]=>
    string(5) "62.00"
  }
  [2]=>
  array(2) {
    ["ticket_type"]=>
    string(9) "normal"
    ["ticket_price"]=>
    string(6) "182.00"
  }
  [3]=>
  array(2) {
    ["ticket_type"]=>
    string(9) "cheaper"
    ["ticket_price"]=>
    string(6) "162.00"
  }
  [4]=>
  array(2) {
    ["ticket_type"]=>
    string(9) "normal"
    ["ticket_price"]=>
    string(6) "103.00"
  }
  [5]=>
  array(2) {
    ["ticket_type"]=>
    string(9) "cheaper"
    ["ticket_price"]=>
    string(5) "63.00"
  }
  [6]=>
  array(2) {
    ["ticket_type"]=>
    string(9) "normal"
    ["ticket_price"]=>
    string(6) "203.00"
  }
  [7]=>
  array(2) {
    ["ticket_type"]=>
    string(9) "cheaper"
    ["ticket_price"]=>
    string(6) "163.00"
  }
}

我想獲取“普通”和“便宜”機票類別的最低和最高價格,會有更多的機票類別,所以不能對其進行硬編碼,可以從DB獲取,我該怎么做? 我現在正在使用PHP 5.6,需要導出為數組或json,讓我知道是否需要更多詳細信息。

謝謝

您可以在SQL級別上執行此操作:

SELECT MIN(ticket_price) AS min_ticket_price, MAX(ticket_price) as max_ticket_price, ticket_type 
FROM {your_table_name} 
WHERE {your_conditions} 
GROUP BY ticket_type

如果您仍然想在PHP中執行此操作,則可以循環數組並對票證類型進行排序,然后獲取最小值和最大值。

foreach($arr as $ticket){
    $new[$ticket["ticket_type"]][] = $ticket["ticket_price"];
}

// loop the new array to only get the max and min values of each ticket type
foreach($new as $key => $n){
    $res[$key]["max"] = max($n);
    $res[$key]["min"] = min($n);
}

輸出:

array(2) {
  ["normal"]=>
  array(2) {
    ["max"]=>
    string(6) "203.00"
    ["min"]=>
    string(5) "82.00"
  }
  ["cheaper"]=>
  array(2) {
    ["max"]=>
    string(6) "163.00"
    ["min"]=>
    string(5) "62.00"
  }
}

https://3v4l.org/RcCHZ

這是在php級別上要執行的解決方案:

$prices = [ 
  ["ticket_type"=>"normal", "ticket_price"=>"82.00"],
  ["ticket_type"=>"cheaper", "ticket_price"=>"62.00"],
  ["ticket_type"=>"normal", "ticket_price"=>"182.00"],
  ["ticket_type"=>"cheaper", "ticket_price"=>"162.00"],
  ["ticket_type"=>"normal", "ticket_price"=>"103.00"],
  ["ticket_type"=>"cheaper", "ticket_price"=>"63.00"],
  ["ticket_type"=>"normal", "ticket_price"=>"203.00"],
  ["ticket_type"=>"cheaper", "ticket_price"=>"163.00"],
];

// STEP:1 group by ticket types
$grouped_array = [];
foreach($prices as $price) {
   $ticket_type = $price["ticket_type"];
   $grouped_array[$ticket_type][] = $price["ticket_price"];
}

/* 
$grouped_array = [
 "normal" => ["82.00", "182.00", "103.00", "203.00"],
 "cheaper => ["62.00", "162.00", "63.00", "163.00"]
];
*/


function minMax($type_array) {
  $min_max = ['min'=> min($type_array), 'max'=>max($type_array)];
  return $min_max;
}

// STEP 2: find min and max in each category
$min_max = [];
foreach($grouped_array as $type => $prices) {
  $min_max[$type] = minMax($prices);
}

/* 
$min_max = [
 "normal" => ["min"=>"82.00", "max"=>"203.00"],
 "cheaper => ["min"=>"62.00", "max"=>"163.00"]
];
*/

但是,在您的情況下,最好在數據庫層上執行此操作。 這回答了“如何在多維數組中獲得最大值和最小值”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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