php - PHP数组按值和最小值-最大值分组
问题描述
我需要在 PHP 中合并数组的帮助,我有这个数组,我正在尝试按模型对项目进行分组,并从year合并最小值和最大值:
[0] => Array
(
[brand] => SUZUKI
[model] => GSF 1250 Bandit
[year] => 2006
)
[1] => Array
(
[brand] => SUZUKI
[model] => GSF 1250 Bandit
[year] => 2007
)
[2] => Array
(
[brand] => SUZUKI
[model] => GSF 1250 Bandit
[year] => 2008
)
[3] => Array
(
[brand] => SUZUKI
[model] => GSX 1250FA
[year] => 2011
)
[4] => Array
(
[brand] => SUZUKI
[model] => GSX 1250FA
[year] => 2012
)
[5] => Array
(
[brand] => SUZUKI
[model] => GSR 600
[year] => 2006
)
[6] => Array
(
[brand] => SUZUKI
[model] => GSR 600
[year] => 2007
)
[7] => Array
(
[brand] => SUZUKI
[model] => GSR 600
[year] => 2008
)
我想按模型对项目进行分组,并合并year的最小值和最大值,如下所示:
[0] => Array
(
[brand] => SUZUKI
[model] => GSF 1250 Bandit
[year] => 2006 - 2008
)
[1] => Array
(
[brand] => SUZUKI
[model] => GSX 1250FA
[year] => 2011 - 2012
)
[2] => Array
(
[brand] => SUZUKI
[model] => GSR 600
[year] => 2006 -2008
)
我知道如何按模型对项目进行分组,但我无法实现合并年份:
foreach($array as $row){
$newArray[$row["model"]] = array(
"brand" => $row["brand"],
"model" => $row["model"],
"year" => $row["year"]
);
}
感谢您的任何帮助。
解决方案
这将其分为两个阶段,首先收集每个项目的最小和最大年份的数据。设置最小值和最大值时,它会检查先前的值(如果未找到,则默认为默认值)并应用适当的min()
或max()
...
$newArray = [];
foreach($array as $row){
$newArray[$row["model"]] = array(
"brand" => $row["brand"],
"model" => $row["model"],
"minyear" => min($newArray[$row["model"]]["minyear"] ?? PHP_INT_MAX, $row["year"]),
"maxyear" => max($newArray[$row["model"]]["maxyear"] ?? PHP_INT_MIN, $row["year"]),
);
}
这会产生...
Array
(
[GSF 1250 Bandit] => Array
(
[brand] => SUZUKI
[model] => GSF 1250 Bandit
[minyear] => 2006
[maxyear] => 2008
)
[GSX 1250FA] => Array
(
[brand] => SUZUKI
[model] => GSX 1250FA
[minyear] => 2011
[maxyear] => 2012
)
)
然后,您可以处理它以提供您所追求的格式的年份(删除不再使用的字段)...
foreach ( $newArray as &$row ) {
$row['year'] = $row['minyear'] . " - ". $row['maxyear'];
unset ( $row['minyear'], $row['maxyear'] );
}
产生...
Array
(
[GSF 1250 Bandit] => Array
(
[brand] => SUZUKI
[model] => GSF 1250 Bandit
[year] => 2006 - 2008
)
[GSX 1250FA] => Array
(
[brand] => SUZUKI
[model] => GSX 1250FA
[year] => 2011 - 2012
)
)
推荐阅读
- javascript - 如何检查 Html 或任何其他格式作为输入?
- json - 如何在python中删除重复的JSON对象
- ios - 禁用安全区域布局指南
- javascript - HTML按钮选择表格上的特定列
- javascript - 带有只读块的浏览器代码编辑器
- javascript - Javascript简单滚动功能问题
- prisma - 为 prisma 数据模型中的数组字段定义是否需要
- mysql - 无法添加或更新子行:外键约束失败 ON DELETE CASCADE ON UPDATE CASCADE
- vba - 检查整数值与浮点值
- python-3.x - 删除行的重复组合值后,重复项未删除