Foreach循环仅返回最后一个结果

时间:2020-01-20 01:42:23

标签: php wordpress foreach

我需要格式化YYYY-MM-DD日期才能像“ 2020年1月12日”那样输出,我有正确输出的日期,但是代码只会输出我想要的五个值之一,我已经显然错过了一些东西。

我遇到了以下代码仅输出单个结果的问题:

created_at

如果我替换:

function populate_dropdown($form){

    //Reading posts for "Events" post type;
    $posts = get_posts("post_type=el_events&orderby=date&order=asc&el_eventcategory=flo-talanoa&numberposts=-1");

    //Creating drop down item array.
    $items = array();
    //Adding post dates titles to the items array
    foreach($posts as $post)
        $unformatteddate = $post->startdate;
        $dateTime = DateTime::createFromFormat("Y-m-d", $unformatteddate);
        $dateformatted = $dateTime->format('j F Y');
        $items[] = array(
            "value" =>  $dateformatted . ': ' . $post->location, 
            "text" => $dateformatted . ': ' . $post->location
        );

    //Adding items to field id 1.
    foreach($form["fields"] as &$field)
        if($field["id"] == 1){
            $field["type"] = "select";
            $field["choices"] = $items;
        }

    return $form;
}

使用:

            $unformatteddate = $post->startdate;
            $dateTime = DateTime::createFromFormat("Y-m-d", $unformatteddate);
            $dateformatted = $dateTime->format('j F Y');
            $items[] = array(
                "value" =>  $dateformatted . ': ' . $post->location, 
                "text" => $dateformatted . ': ' . $post->location
            );

代码输出所有五个值(尽管使用YYYY-MM-DD日期格式),我缺少什么?我是PHP的新手。

预先感谢

2 个答案:

答案 0 :(得分:2)

您忘记在{}循环中添加foreach

foreach($posts as $post){
    $unformatteddate = $post->startdate;
    $dateTime = DateTime::createFromFormat("Y-m-d", $unformatteddate);
    $dateformatted = $dateTime->format('j F Y');
    $items[] = array(
        "value" =>  $dateformatted . ': ' . $post->location, 
        "text" => $dateformatted . ': ' . $post->location
    );
}

//Adding items to field id 1.
foreach($form["fields"] as &$field){
    if($field["id"] == 1){
        $field["type"] = "select";
        $field["choices"] = $items;
    }
}

答案 1 :(得分:0)

您在foreach中缺少花括号{}。