(PHP)如何将年份列表压缩为一个范围

(PHP)如何将年份列表压缩为一个范围,php,sorting,range,collapse,Php,Sorting,Range,Collapse,我使用的是PHP,我有一系列的工具,通常有几年的时间。我基本上希望折叠重复条目,其中除了年份之外,其他年份都是相同的make/model/engine,并将各个年份转换为一个范围。例如,它不是2001年、2002年、2003年的单个条目,而是折叠为2001-2003年的单个条目 因此,我想将其转换为: Acura CL 2.2L 1997 Acura CL 2.3L 1998 Acura CL 2.3L 1999 Acura CL 3.0L 1997 Acura CL 3.0L 1998 Acu

我使用的是PHP,我有一系列的工具,通常有几年的时间。我基本上希望折叠重复条目,其中除了年份之外,其他年份都是相同的make/model/engine,并将各个年份转换为一个范围。例如,它不是2001年、2002年、2003年的单个条目,而是折叠为2001-2003年的单个条目

因此,我想将其转换为:

Acura CL 2.2L 1997
Acura CL 2.3L 1998
Acura CL 2.3L 1999
Acura CL 3.0L 1997
Acura CL 3.0L 1998
Acura CL 3.0L 1999
Acura CL 3.2L 2001
Acura CL 3.2L 2002
Acura CL 3.2L 2003
Acura Integra 1.6L 1986
Acura Integra 1.6L 1987
Acura Integra 1.6L 1988
Acura Integra 1.6L 1989
Acura Integra 1.7L 1992
Acura Integra 1.7L 1993
Acura Integra 1.8L 1990
Acura Integra 1.8L 1991
Acura Integra 1.8L 1992
Acura Integra 1.8L 1993
Acura Integra 1.8L 1994
Acura Integra 1.8L 1995
Acura Integra 1.8L 1996
Acura Integra 1.8L 1997
Acura Integra 1.8L 1998
Acura Integra 1.8L 2000
Acura Integra 1.8L 2001
为此:

Acura CL 2.2L 1997
Acura CL 2.3L 1998-1999
Acura CL 3.0L 1997-1999
Acura CL 3.2L 2001-2003
Acura Integra 1.6L 1986-1989
Acura Integra 1.7L 1992-1993
Acura Integra 1.8L 1990-1998
Acura Integra 1.8L 2000-2001

任何帮助都将不胜感激!非常感谢你

您可以迭代名称,获取年份,并将信息存储在地图中

<?

foreach($models as $model){
  $type = substr($model, 0, -5);
  $year = substr($model, -4);
  if (!isset($results[$type])) {
    $results[$type] = array('min'=> $year, 'max'=>$year);
  } else {
    $results[$type]['min']=min($results[$type]['min'], $year);
    $results[$type]['max']=max($results[$type]['max'], $year);
  }
}

foreach($results as $type=>$years){
  if ($years['min']==$years['max']){
    $years_string = $years['min'];
  } else {
    $years_string = $years['min'],'-',$years['max'];
  }
  echo $type,' ', $years_string, "\n";

}

?>

检查此小提琴:

此数据是否来自数据库?如果是,请显示SQL查询如果是db,请使用选择不同的产品min year和max yearYes。我使用while$row=mysql\u fetch\u row$result{$str[]=$row[0];}将表名列在一个数组中,上面的列表就是原始数组内容。太棒了!我怎样才能使它在只有一年的时候,不显示一个范围?例如,Acura CL 2.2L 1997列表中的第一项已转换为Acura CL 2.2L 1997-1997。我怎样才能防止它从1997年变为1997-1997年呢?非常感谢你!如果$years['min']==$years['max'],则可以执行此操作,并显示不同的字符串。我在哪里实现此操作?我是PHP新手。再次感谢你,伙计!我真的很感谢你的帮助!我编辑了代码来添加它。你能接受并投赞成票吗?