PHP - Foreach和比较日期 [英] PHP - Foreach and compare date
问题描述
你好,我有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屋!