按年对数组进行组织和分组

时间:2012-06-13 作者:Squadrons

正在查找一些代码审阅。

我有一个问题,我必须按年份列出事件。这是按meta\\u键(“show\\u date”)排序的。

它按预期工作,尽管我很想看看是否有其他更有效的方法来实现这一点。

我已经注释了我的代码,以阐明我的思想过程。

<?php get_header(); ?>

<?php 
$args = array(
    \'post_type\' => \'event\',
    \'category_name\' => \'past\',
    \'meta_key\' => \'show_date\',
    \'order_by\' => \'meta_value\'
);

$prod_history = new WP_Query( $args );

//set up the arrays to store the years so I can iterate over them easily later
$all_years = array();




if ( $prod_history->have_posts() ) :
?>

<?php while( $prod_history->have_posts() ): $prod_history->the_post(); ?>
    <?php 
        $date_str = get_field( \'show_date\' );
        //seperate the date from format \'MONTH day(int), YYYY, giving us only year       
        $show_year = explode(\',\', $date_str);

        //reassign $show_year to an interger instead of a string
        $year_num = intval( $show_year[1] );        
        $link = get_permalink();
        $title = get_the_title();  

        array_push( $all_years, $year_num );

        $dates[] = array(
            $year_num => array (
                \'title\' => $title,
                \'link\' => $link
            )
        );

        ?>
<?php endwhile; endif; ?>

<?php
    $start_year = min( $all_years );
    $end_year = max( $all_years );

    foreach( range( $end_year, $start_year ) as $year ){
        echo "<h2>" . $year . "</h2>";
        foreach( $dates as $date ){
            foreach ( $date as $key => $value ) {
                if( $key == $year ) {
                    echo \'<h3><a href="\' . $value["link"] . \'" class="link" >\' . $value[\'title\'] . "</a></h3>";
                }
            }
        }
    }
?>
设置多维数组“$dates”是最好的方法吗?

我的四大深度foreach声明是最有效的方式吗?

我是否忽略了一个更简单的解决方案?

只是想成为一个更好的程序员,谢谢你的帮助。

1 个回复
SO网友:Milo

如果您将日期格式固定为yyyy-mm-dd 他们会自然而然地自行排序,您不必做所有这些复杂的输出。

结束

相关推荐

WordPress Theme Preview Image

我正在开发一个自定义WordPress主题。当我在外观菜单中选择主题时,我的主题没有预览图像。我需要做些什么来显示预览图像吗?我在网上找不到任何关于这方面的资源。也许我只是在寻找错误的东西。。。?