Как получить максимальное и минимальное значение в многомерном массиве - PullRequest
0 голосов
/ 27 ноября 2018

У меня есть этот массив:

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"
  }
}

Я хочу получить минимальную и максимальную цену для «обычных» и «дешевых» категорий билетов, будет больше категорий билетов, поэтому не могу ввести жесткий кодэто, получит из БД, как я могу это сделать?Я использую PHP 5.6 сейчас, нужно экспортировать как массив или JSON, дайте мне знать, если нужно больше деталей.

Спасибо

Ответы [ 3 ]

0 голосов
/ 27 ноября 2018

Если вы все еще хотите сделать это в 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);
}

output:

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

0 голосов
/ 27 ноября 2018

Вот решение, которое нужно сделать на уровне 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"]
];
*/

Однако в вашем случае это лучше всего сделать на уровне базы данных.это отвечает «Как получить максимальное и минимальное значение в многомерном массиве».

0 голосов
/ 27 ноября 2018

Вы можете сделать это на уровне 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...