Is there a more efficient way of creating a list of years/months?

On a page I want to dynamically list years and all the months in each year so an archive for each month can be viewed. I want to show the current year first but the current year may not be over yet so I only want to show the months that have passed, and the current month. Then I want all years and all months in the past since this year (i.e. 2008).

The PHP code I have created that does the job is below. Is there a more efficient way of achieving this? I am running PHP 5.2.

$current_year = date('Y');
$months = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12);

// Loop through all the months and create an array up to and including the current month
foreach ($months as $month)
{
    if ($month <= date('m'))
    {
    	switch ($month)
    	{
    		case 1:
    			$years[$current_year][] = 'January';
    			break;
    		case 2:
    			$years[$current_year][] = 'February';
    			break;
    		case 3:
    			$years[$current_year][] = 'March';
    			break;
    		case 4:
    			$years[$current_year][] = 'April';
    			break;
    		case 5:
    			$years[$current_year][] = 'May';
    			break;
    		case 6:
    			$years[$current_year][] = 'June';
    			break;
    		case 7:
    			$years[$current_year][] = 'July';
    			break;
    		case 8:
    			$years[$current_year][] = 'August';
    			break;
    		case 9:
    			$years[$current_year][] = 'September';
    			break;
    		case 10:
    			$years[$current_year][] = 'October';
    			break;
    		case 11:
    			$years[$current_year][] = 'November';
    			break;
    		case 12:
    			$years[$current_year][] = 'December';
    			break;
    	}
    }
}

// Previous years
$years_to_create = $current_year - 2008;

if (!empty($years_to_create))
{
    for ($i = 1; $i <= $years_to_create; $i++)
    {
    	$years[$current_year - $i] = array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December');
    }
}

Answers


$current_year = date('Y');
$months = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12);
$month_names = array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December');

// Loop through all the months and create an array up to and including the current month

for ($month=1;$month<=date('m');$month++)
{
$years[$current_year][] = $month_names[$month-1];
}

// Previous years
$years_to_create = $current_year - 2008;

if (!empty($years_to_create))
{
    for ($i = 1; $i <= $years_to_create; $i++)
    {
        $years[$current_year - $i] = $month_names;
    }
}

This seems a little simpler...is it any faster...?


try this it will out put a descending list of months/years for the past 5 years

$years = 5;

for ($i = 0; $i < (12* $years); $i++)
{
    if (date('Y',strtotime("-".$i." month")) > (date('Y') - $years) )
    {
      echo date('F Y',strtotime("-".$i." month")) . '<br />'; 
    }
}

Then if you need it in an array, just add to as you go like so

$years = 5;
$myarray = array();

for ($i = 0; $i < (12* $years); $i++)
{
    if (date('Y',strtotime("-".$i." month")) > (date('Y') - $years) )
    {
         $year_key = date('Y') - date('Y',strtotime("-".$i." month")); 
         $myarray[$year_key][] = date('F',strtotime("-".$i." month"));
    }
}

//Write it out to the screen
foreach ($myarray as $yearkey=>$eachyear)
{
    foreach ($eachyear as $eachmonth)
    {	
        echo (date('Y')-$yearkey) . ' ' . $eachmonth . '<br>';
    }
}

Need Your Help

call-with-current-continuation - state saving concept

scheme continuations continuation-passing callcc

After reading The Seasoned Schemer I felt I understood call/cc properly. But, after seeing some WOW tricks with call/cc I found I was wrong.

How do you set a the buttons in a UIToolbar for subview of Navigation Controller application using Interface Builder?

iphone objective-c interface-builder

I have a navigation-based iPhone app that goes down 3 levels deep currently. The MainWindow nib has inside of the Navigation Controller a navigation bar, toolbar, and a reference to the Root View

About UNIX Resources Network

Original, collect and organize Developers related documents, information and materials, contains jQuery, Html, CSS, MySQL, .NET, ASP.NET, SQL, objective-c, iPhone, Ruby on Rails, C, SQL Server, Ruby, Arrays, Regex, ASP.NET MVC, WPF, XML, Ajax, DataBase, and so on.