Вы не проверяете наличие дубликатов за год до его вывода.Это ваша основная проблема.
Вы должны сначала сохранить возможные годы в виде массива, а затем заполнить опции, основанные на этом массиве.Таким образом, вам не придется беспокоиться о дублировании.Если у вас 11.26.2009, 09.01.2010, 15.15.2010, 06.05.2011, выполните итерацию всех результатов для массива, аналогичного массиву $ yearOptions = ('2009', '2010', '2011');
Другим преимуществом здесь является то, что в случае ошибки в отображении дат вы можете просто var_dump($yearOptions);
посмотреть, что там отображается.
Наконец, я бы предложил использовать strtotime()
вместо explode()
просто потому, что он может принять потенциально нестандартный формат даты и по-прежнему возвращать правильную метку времени UNIX.Тогда вы можете манипулировать им, используя date()
.Дополнительный мини-бонус: если вы когда-нибудь захотите перейти на '09, а не на 2009 год, это простой переход.
$result = mysql_query("SELECT date FROM user_history");
$yearOptions = array();
while($row = mysql_fetch_array($result)) {
$date = $row['date'];
// convert the date to a UNIX timestamp
$date = strtotime($date);
// retrieve just the Y (xxxx) from the timestamp
$year = date('Y', $date)
// if the year doesn't already exist in the array, add it.
if(!in_array($year, $yearOptions)) { $yearOptions[] = $year; }
}
foreach($yearsOptions as $year) {
echo('<option value="' . $year . '">' . $year . '</option>');
}
Надеюсь, это сработает.