对包含日期和重新排列索引的数组进行排序

时间:2014-03-11 18:19:57

标签: php wordpress sorting multidimensional-array

我在wordpress网站上创建了自定义帖子。在这篇文章中,我创建了日期格式为YYYY-MM-DD的事件。 然后我想在我的网站上显示接下来的3个事件。

我创建了以下数组:

Array{
    [0]=> Array(
        [EventDate] => 2014/03/14
        [TimestampEvent] => 1394582400
        [DeltaEvent] => 22327
    )
    [1]=> Array(
        [EventDate] => 2014/03/15
        [TimestampEvent] => 1394582401
        [DeltaEvent] => 22328
    )
    [2]=> Array(
        [EventDate] => 2014/03/16
        [TimestampEvent] => 1394582402
        [DeltaEvent] => 22329
    )
}

我想:

  • 忽视已经发生的事件;
  • 将我未来的事件从最近的事件排序到最远的事件;
  • 在我的网站上显示接下来的3个活动。

我已经对最后一点进行了整理。问题更多的是关于对事件进行排序。

到目前为止,我已经尝试过uksort()函数,但我无法使用它。

有什么想法吗?

编辑;

@Bram解决方案效果很好! 唯一的问题是Array $ next的结构是:

Array{
    [0]=> Array(
        [EventDate]=> 2014/03/16
        [TimestampEvent] => 1394582402
        [DeltaEvent] => 22329
    )
}

如何从$ next数组中访问EventDate键?我已经尝试了$ next [0] [0],但令人惊讶的是没有工作。

重新编辑;

$next[$i][DateEvenement]

我差不多完成了!现在一切都在网站上显示,每个日期都很好!唯一的事情是,最近的3个日期按照它们在wordpress中添加的顺序显示。我的代码如下:

$my_query = new WP_Query('post_type=event');
while ($my_query->have_posts()) : $my_query->the_post();                                     
for($i=0;$i<count($next);$i++){                                         
    if(get_field('date') == $next[$i][DateEvent]){ ?>
        <div>  
            <h2><?php echo the_title(); ?></h2>
            <p><?php echo the_content(); ?></p>
        </div>
    <?php
    }
}
endwhile;?>

问题可能来自我的查询,但我不确定如何解决这个问题。

感谢您的帮助!

重新重新编辑;

@Myself

妈妈,我做到了!它的工作就像一个魅力。我只需修复我的查询。这是我使用的代码:

for($i=0;$i<count($next);$i++){
     $args = array('numberposts' => 1,'post_type' => 'evenement','meta_key' => 'date','meta_value' => $next[$i][DateEvenement]);
     $the_query = new WP_Query( $args );
     if( $the_query->have_posts() ){
         while ( $the_query->have_posts() ){                                                
            $the_query->the_post();                                            
            if(get_field('date') == $next[$i][DateEvenement]){ ?>                                                    
                <div>                                                       
                    <h2><?php echo the_title(); ?></h2>                                                 
                    <p><?php echo the_content(); ?></p>                                                              
                </div>                                                                      
<?php
            }
        }
    }
}?>

1 个答案:

答案 0 :(得分:1)

未经测试,但是这样的事情会让你接近答案......

忽略已经发生的事件;

$new_data = array_filter($data, function ($a) { return $a['TimestampEvent']>time(); });

将我的未来事件从最近的事件排序到最远的事件;

usort($data, function ($a, $b) {
    if ($a['TimestampEvent']==$b['TimestampEvent']) return 0;
    return ($a['TimestampEvent'] < $b['TimestampEvent']) ? -1 : 1;
});

在我的网站上显示接下来的3个活动。

$next = array_slice($data, 0, 3);