0

I've generated an array of dates. Here is a quick sample

Array
(
[2013] => Array
    (
        [Feb] => 2013
        [Jan] => 2013
    )

[2012] => Array
    (
        [Oct] => 2012
        [Jun] => 2012
        [May] => 2012
    )

)

Sample code:

<?php
$posts = get_posts(array('numberposts' => -1, 'post_status' => 'publish', 'post_type' => 'post', ));
#       $i=1;
print '<pre>';
foreach ($posts as $post) {
    #       $post_results[$post->ID][month] = get_the_time('m', $post->ID);
    #       $post_results[$post->ID][year]  = get_the_time('Y', $post->ID);
    $year = get_the_time('Y', $post -> ID);
    $month = get_the_time('M', $post -> ID);
    $post_results[$year][$month] = get_the_time('Y', $post -> ID);
    #       echo "$i. Post ID: "  .$post->ID." - " .get_the_time('Y-m-d', $post->ID)."<br/>";
    #       $i++;
}

foreach ($post_results as $key => $value) {
    echo "Month: " . $key . " Year: " . $value . "<br/>";
}

print_r($post_results);
print '</pre>';
?>

I'd like to list all dates in the same format as this webpage http://www.smartpassiveincome.com/archives/

What I need is help getting my array to separate values like what you see above. I can do the linking part myself, I just need the data pulled into easy to use variables for me.

For example, I'd like to say "For each year, get all the months listed, then type out <td>$year</td><td>$month</td> then move on to the previous year.

0

3 Answers 3

1

Here's what I think you need, his is one way to achieve the following:

2013 | Feb | Jan
2012 | Oct | Jun | May

Original:

$arrYears = array(2013=>array("Feb"=>2013, "Jan"=>2013), 2012=>array("Oct"=>2013, "Jun"=>2013, "May"=>2013));
        foreach($arrYears as $strYear=>$arrMonths) {
            echo $strYear;
            // This is our logic for each year
            foreach($arrMonths as $strMonth=>$strYear2) {
                echo " | ".$strMonth;
            }
            echo "<br />";
        }

Edit: Put months in a nested list

 $arrYears = array(
                 2013=>array("Feb"=>2013, "Jan"=>2013),
                 2012=>array("Oct"=>2013, "Jun"=>2013, "May"=>2013)
              );

 echo "<ul>";
     foreach($arrYears as $strYear=>$arrMonths) {
         echo "<li>";
             echo $strYear;
             echo "<ul>";

                foreach($arrMonths as $strMonth=>$strYear2) {
                    echo "<li><a href='#'>".$strMonth."</a></li>";
                }

             echo "</ul>";
         echo "</li>";
     }
 echo "</ul>";
Sign up to request clarification or add additional context in comments.

Comments

1

This will get you what you need. Just change $currentDate to be a timestamp for whatever date you want to start from.

$currentDate = strtotime('January 1st, 2000');
$newestDate = strtotime(date('Y-m-01'));
$yearMonthArray = array();

while ($currentDate <= $newestDate) {
    if (!array_key_exists($year = date('Y', $currentDate), $yearMonthArray)) {
        $yearMonthArray[$year] = array();
    }

    $yearMonthArray[$year][] = date('M', $currentDate);

    $currentDate = strtotime('next month', $currentDate);
}

var_dump($yearMonthArray);

Edit: This just gets you all year/month combinations. You should be able to use this example combined with your code to get something that shows only months with posts.

Comments

0

I figured it out myself, here is my new code

$posts = get_posts(
    array(
        'numberposts' => -1,
        'post_status' => 'publish',
        'post_type' => 'post',
    )
);
foreach ($posts as $post) {
    $year = get_the_time('Y', $post->ID);
    $month = get_the_time('M', $post->ID);
    $post_results[$year][$month]  = $month;
}

foreach ($post_results as $key => $value) { 
    echo "<b>"  .$key."</b> ";

    foreach ($value as $sub_key => $sub_value) { 
        echo $sub_key." ";
    }
    echo "<br/>";

}

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.