PHP - Foreach和比较日期 [英] PHP - Foreach and compare date

查看:115
本文介绍了PHP - Foreach和比较日期的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

你好,我有foreach的地方在数据库中的事件的数据,我在数据库中使用日期一个名字,例如event_date。例如我有这个事件。


第一项赛事 - 9月13日

第二项赛事 - 9月01日

第三项赛事 - 9月13日

输出我需要

 < div class =event_head> 
< span>第一个< / span>
< span> 9月13日< / span>
< br />
< span>事件三< / span>
< span> 9月13日< / span>
< / div>

这是foreach中的条件



<$ p $如果($ date == $ date){
?>

< div class =event_head>
< span><?php echo $ name_event?>< / span>
< span><?php echo $ date;?>< / span>
< br />
< / div>

<?php

} else {
echo $ date;
}
?>

这是不行的,有些方法怎么比较一下呢? b
$ b

谢谢(对不起我的英语)

编辑:
我使用ACF pro版本,我需要在一个div相同的事件输出,并创建像日历。所以这里是真实的代码

$ $ p $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ b'post_type'=> array('town1_event','town2_event'),
'meta_key'=>'datum_eventu',
'orderby'=>'meta_value_num',
'order'=>'ASC'
));
$ b $ if($ posts){

foreach($ post as $ post){

// $ datum = get_field(datum_eventu) ;
// $ nazev = get_field(nazev_eventu);

$ date = get_field('datum_eventu',false,false);
$ date = new DateTime($ date);

// echo $ date-> format('j M');
// echo $ date-> format('j M Y')

// echo $ datum;

?>

$ php
if($ date-> format('jM')== $ date-> format('jM')){
?> ;
< div class =calendar_head>
< span><?php echo $ nazev?>< / span>< br />
< span><?php echo $ date-> format('jM');?>< / span>
< / div>
<?php
} else {
echo< br />;
echo $ datum;
}
}

wp_reset_postdata();

}
?>

EDIT2:
最终输出

  22 JUL | 25 JUL 
EVENT 1 EVENT 2 | EVENT 3

EDIT3(已解决): (b
pre $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ 'post_status'=>'publish',
'meta_key'=>'datum_eventu',
'orderby'=>'meta_value_num',
'order'=>'ASC '
));

#这将保存我们在
$ current_header ='';

#Loop
while($ the_query-> have_posts()):
$ the_query-> the_post();

#获取这篇文章的数据
$ temp_date = get_post_meta(get_the_ID(),'datum_eventu',true);

#如果它们不相同,我们将开始一个新的组,现在
#只意味着设置一个新的标题
if($ temp_date!= $ current_header){
$ current_header = $ temp_date;
$ old_date = date($ current_header);
$ old_date_timestamp = strtotime($ old_date);
$ new_date = date('d。M',$ old_date_timestamp);
echo< h2> $ new_date< / h2>;

}
$ nazev = get_field(nazev_eventu);
echo $ nazev;
echo< br />;
#...在这里做普通循环的东西

endwhile;

我从Matthew Boynes的不同页面找到这个解决方案:)
<您可以使用 usort 并创建您自己的自定义函数来获取结果并对其进行过滤。

>

 <?php 
$ events = array(
'event1'=> array(
'event_name'=>'Title for Event 1',
'event_date'=>'2017-11-1'
),
'event3'=> array(
'event_name'=>'事件1的标题',
'event_date'=>'2017-10-13'
),
'event4'=> array(
'event_name'=>'事件1的标题',
'event_date'=>'2017-11-10'
),
'event2'=> (
'event_name'=>'Title for Event 1',
'event_date'=>'2017-10-22'
),
);

函数date_compare($ a,$ b)
{
//注意变量正在调用数组
的日期部分//如果你是使用从MySQL的assoc数组只是改变值
//到你的行名
$ t1 = strtotime($ a ['event_date']);
$ t2 = strtotime($ b ['event_date']);
返回$ t1 - $ t2;
}
usort($ events,'date_compare');
print_r($ events);

您的输出应该是:

<$ p $数组

[0] =>数组

[event_name] =>事件1的标题
[event_date ] => 2017-10-13


[1] =>数组

[event_name] => $ b [event_date] => 2017-10-22


[2] =>数组

[event_name] =>事件1
[event_date] => 2017-11-1


[3] =>数组

[event_name] = >事件1的标题
[event_date] => 2017-11-10



我从这个答案得到了这个函数。通过回答,费迪南德·拜尔



希望这有助于

Hello I have foreach where I geting data of events in database, I use for date one name in database for example event_date. I need compare action with same date and output in one div.

For example I have this events.

Event one - 13 Sep

Event two - 01 Sep

Event three - 13 Sep

Output i need

<div class="event_head">
        <span>Event one</span>
        <span>13 Sep</span>
        <br/>
        <span>Event three</span>
        <span>13 Sep</span>
</div>

This is condition in foreach

if($date == $date){
    ?>

    <div class="event_head">
        <span><?php echo $name_event?></span>
        <span><?php echo $date;?></span>
        <br/>
    </div>

    <?php

}else{
    echo $date;
}
    ?>

This is not working, is some way how to compare it some this way ?

Thank you (sorry for my english)

EDIT: I use ACF pro version and I need same event output in one div and create something like calendar. So here is real code

<?php 

$posts = get_posts(array(
    'post_type' => array('town1_event', 'town2_event'),
    'meta_key'  => 'datum_eventu',
    'orderby'   => 'meta_value_num',
    'order'     => 'ASC'
));

if( $posts ) {

    foreach( $posts as $post ) {

        //$datum = get_field("datum_eventu");
        //$nazev = get_field("nazev_eventu");

        $date = get_field('datum_eventu', false, false);    
        $date = new DateTime($date);

        //echo $date->format('j M');
        //echo $date->format('j M Y')

        //echo $datum;

        ?>

        <?php
        if($date->format('jM') == $date->format('jM')){
        ?>
        <div class="calendar_head">
        <span><?php echo $nazev?></span><br/>
        <span><?php echo $date->format('jM');?></span>
        </div>
        <?php   
        }else{
        echo "<br/>";
        echo $datum;
        }
    }

    wp_reset_postdata();

}
?>

EDIT2: Final output

22 JUL              | 25 JUL
EVENT 1     EVENT 2 | EVENT 3

EDIT3 (Solved):

$the_query = new WP_Query( array(
    'post_type'   => array('town1_event','town2_event'),
    'post_status' => 'publish',
    'meta_key'    => 'datum_eventu',
    'orderby'     => 'meta_value_num',
    'order'     => 'ASC'
) );

# This will hold what group we're in
$current_header = '';

# The Loop
while ( $the_query->have_posts() ) :
    $the_query->the_post();

    # get the datum for this post
    $temp_date = get_post_meta( get_the_ID(), 'datum_eventu', true );

    # If they aren't the same, we'll start a new group, which for now
    # just means setting a new heading
    if ( $temp_date != $current_header ) {
        $current_header = $temp_date;
        $old_date = date($current_header);             
        $old_date_timestamp = strtotime($old_date);
        $new_date = date('d. M', $old_date_timestamp); 
        echo "<h2>$new_date</h2>";

    }
    $nazev = get_field("nazev_eventu");
        echo $nazev;
        echo "<br/>";
    # ... do normal loop stuff here

endwhile;

I find this solution on different page from Matthew Boynes :)

解决方案

You can use usort and create your own custom function to get the results and filter them.

<?php    
$events = array(
    'event1' => array(
        'event_name' => 'Title for Event 1',
        'event_date' => '2017-11-1'
    ),
    'event3' => array(
        'event_name' => 'Title for Event 1',
        'event_date' => '2017-10-13'
    ),
    'event4' => array(
        'event_name' => 'Title for Event 1',
        'event_date' => '2017-11-10'
    ),
    'event2' => array(
        'event_name' => 'Title for Event 1',
        'event_date' => '2017-10-22'
    ),
);

function date_compare($a, $b)
{ 
    // note that the variables are calling for the date part of the array
    // if you are using assoc array from mysql just change the value
    // to your row name
    $t1 = strtotime($a['event_date']);
    $t2 = strtotime($b['event_date']);
    return $t1 - $t2;
}    
usort($events, 'date_compare');
print_r($events);

Your output should be:

Array
(
    [0] => Array
        (
            [event_name] => Title for Event 1
            [event_date] => 2017-10-13
        )

    [1] => Array
        (
            [event_name] => Title for Event 1
            [event_date] => 2017-10-22
        )

    [2] => Array
        (
            [event_name] => Title for Event 1
            [event_date] => 2017-11-1
        )

    [3] => Array
        (
            [event_name] => Title for Event 1
            [event_date] => 2017-11-10
        )

)

I got this function from this answer. Answered by, Ferdinand Beyer.

Hope this helps

这篇关于PHP - Foreach和比较日期的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆