PHP foreach仅在第一次迭代中显示值

PHP foreach仅在第一次迭代中显示值,php,arrays,wordpress,foreach,Php,Arrays,Wordpress,Foreach,我在wordpress中有一个用于显示列表的自定义帖子类型。我有一个定制的日历插件,我把它放在一起,但是在我的for each循环中从帖子中提取所有值时遇到了问题 当我启动foreach并打印出所有值时,它在第一次显示时一切都很好,但每次迭代后都不会显示所有值(例如内容) 还有一个输出示例(它正确地调用了一个月中的所有31天,并列出了当天发生的事件,但没有输入内容和结束日期。) 提前感谢您提供的任何指导!我觉得我以前遇到过这个问题,但我不记得我是如何解决的,我的头撞到了墙上 编辑:修复方法是将数

我在wordpress中有一个用于显示列表的自定义帖子类型。我有一个定制的日历插件,我把它放在一起,但是在我的for each循环中从帖子中提取所有值时遇到了问题

当我启动foreach并打印出所有值时,它在第一次显示时一切都很好,但每次迭代后都不会显示所有值(例如内容)

还有一个输出示例(它正确地调用了一个月中的所有31天,并列出了当天发生的事件,但没有输入内容和结束日期。)

提前感谢您提供的任何指导!我觉得我以前遇到过这个问题,但我不记得我是如何解决的,我的头撞到了墙上

编辑:修复方法是将数组字段添加到函数副本中

function duplicate_multiday() {
        foreach($this->events as $event) {
            if($event['end_date'] && $event['date'] != $event['end_date']) {
                $date1 = new DateTime($event['date']);
            $date2 = new DateTime($event['end_date']);
            $interval = $date1->diff($date2);
            for($x=1; $x <= $interval->days; $x++) {
                $new_event = array();
                $new_event['title'] = $event['title'];
                $new_event['permalink'] = $event['permalink'];
                $new_event['content'] = $event['content'];
                $new_event['end_date'] = $event['end_date'];
                $new_event['showseason'] = $event['showseason'];
                error_log($event['showseason']);
                $new_event['date'] = date_format($date1->add(new DateInterval('P1D')), "Ymd");
                $new_event['date_object'] = to_date_object($new_event['date']);
                $this->events[] = $new_event;
            }
            }
        }
    }
function duplicate\u multiday(){
foreach($this->events as$event){
如果($event['end\u date']&&$event['date']!=$event['end\u date'])){
$date1=新的日期时间($event['date']);
$date2=新日期时间($event['end_date']);
$interval=$date1->diff($date2);
对于($x=1;$x天;$x++){
$new_event=array();
$new_event['title']=$event['title'];
$new_event['permalink']=$event['permalink'];
$new_event['content']=$event['content'];
$new_event['end_date']=$event['end_date'];
$new_event['showseason']=$event['showseason'];
错误日志($event['showseason']);
$new_event['date']=date_格式($date1->add(new DateInterval('P1D')),“Ymd”);
$new_event['date_object']=to_date_object($new_event['date']);
$this->events[]=$new\u event;
}
}
}
}

您可以在
self::duplicate_multiday()
中修改
$this->events
的数据,您可以在其中复制事件,但不会复制某些信息,如丢失的“
content
”数组字段。

根据您提供的代码,问题与您提供的代码不一样。然而,这已经表明这里的调试请求多于具体的编程问题。请确保如果在foreach中提供数组,它将按原样迭代。如果您丢失了该数组中的数据,则表示您没有将其放入该数组中,或者以后已将其删除。你需要首先发现,也就是说,首先检查你是否插入了数据(测试!),如果是,那么你必须找出你从哪里删除了数据。太棒了,你在钱上是对的。非常感谢。我喜欢有第二双眼睛。一切正常。我将编辑我的帖子,并展示我如何纠正这个问题。再次感谢!
function load_month_events() {
        $query = $this->month_events();
        foreach ($query as $post) {
            $event = array();
            $event['title'] = $post->post_title;
            $event['date'] = get_post_meta($post->ID, 'start_date', true);
            $event['end_date'] = get_post_meta($post->ID, 'end_date', true);
            $event['permalink'] = get_permalink($post->ID);
            $event['date_object'] = to_date_object($event['date']);
            $content_post = get_post($post->ID);
            $event['content'] = $content_post->post_content;

            $shows_categories = wp_get_post_terms($post->ID, 'shows_category');
            $showseason_string = "";
            foreach($shows_categories as $category) {
                $showseason_string = $showseason_string . $category->slug . " ";
            }
            $event['showseason'] = $showseason_string;
            $this->events[] = $event; 
        }
        $this->duplicate_multiday();
        usort($this->events, "cmp");
    }
1
Array ( [title] => A choirs line [date] => 20150101 [end_date] => 20150131 [permalink] => http://localhost:8888/shows/a-choirs-line/ [date_object] => 1420070400 [content] => A Choirs Line Content Goes Here [showseason] => 2014-2015-season )
2
Array ( [title] => A choirs line [permalink] => http://localhost:8888/shows/a-choirs-line/ [showseason] => 2014-2015-season [date] => 20150102 [date_object] => 1420156800 )
function duplicate_multiday() {
        foreach($this->events as $event) {
            if($event['end_date'] && $event['date'] != $event['end_date']) {
                $date1 = new DateTime($event['date']);
            $date2 = new DateTime($event['end_date']);
            $interval = $date1->diff($date2);
            for($x=1; $x <= $interval->days; $x++) {
                $new_event = array();
                $new_event['title'] = $event['title'];
                $new_event['permalink'] = $event['permalink'];
                $new_event['content'] = $event['content'];
                $new_event['end_date'] = $event['end_date'];
                $new_event['showseason'] = $event['showseason'];
                error_log($event['showseason']);
                $new_event['date'] = date_format($date1->add(new DateInterval('P1D')), "Ymd");
                $new_event['date_object'] = to_date_object($new_event['date']);
                $this->events[] = $new_event;
            }
            }
        }
    }