2014-01-04 3 views
-2

Я использую PHP, и у меня есть массив автомобилей, часто с целым рядом лет. Я в основном хочу свернуть дубликаты записей (где это один и тот же make/model/engine за исключением года) и преобразовать отдельные годы в диапазон. В качестве примера вместо отдельных записей за 2001, 2002, 2003 гг. Он сворачивается в единую запись 2001-2003 годов.(PHP) Как свернуть список лет в диапазоне

Итак, я хочу, чтобы преобразовать это:

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 

Любая помощь будет высоко ценится! Спасибо огромное!

+0

грядет эти данные из базы данных? Если это так, укажите ваш SQL-запрос –

+0

Если это db, используйте select select product min year и max year – user1844933

+0

Да. Я перечисляю имена таблиц в массив, используя while ($ row = mysql_fetch_row ($ result)) {$ str [] = $ row [0]; }, а приведенный выше список - это содержимое необработанного массива. – user3159941

ответ

0

Вы можете перемещаться по именам, и получить за год, а также хранить информацию в карте

<? 

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

} 

?> 

Проверить эту скрипку: http://codepad.org/kOe5pi1S

+0

Удивительный! Как я могу сделать это так, что, когда есть только один год, он не показывает диапазон? Например, первый элемент в списке (Acura CL 2.2L 1997) был преобразован в «Acura CL 2.2L 1997-1997». Как я могу помешать ему изменить «1997» на «1997-1997 годы»? Спасибо огромное! – user3159941

+0

Вы можете сделать 'if ($ years ['min'] == $ years ['max'])' и показать другую строку. –

+0

Где это реализовать? Я новичок в PHP. Еще раз спасибо, человек! Я очень ценю вашу помощь! – user3159941

Смежные вопросы