如何从foreach制作数组?

时间:2017-06-16 06:56:11

标签: php arrays

如何在我的代码中使用foreach创建此数组?

以下是我的代码

Array
(
    [0] => Array
        (
            [day] => 2016-11-21
        )

    [1] => Array
        (
            [day] => 2016-11-22
        )

    [2] => Array
        (
            [day] => 2016-11-23
        )

    [3] => Array
        (
            [day] => 2016-11-24
        )

    [4] => Array
        (
            [day] => 2016-11-25
        )
)

以下是我的代码,但结果不同。

结果来自foreach,我希望它是一个数组,就像上面的数组一样。

    foreach ($data['my_undertime'] as $undertime_row) {

        $datetimein = new DateTime($undertime_row->timein);
        $datetimein->format('h:m:s');

        $datetimeout = new DateTime($undertime_row->timeout);
        $datetimeout->format('h:m:s');

        $items = array();

        if ($datetimein->format('h:m:s') > $undertime_row->beg_time && $datetimeout->format('h:m:s') < $undertime_row->end_time) {
            // echo $undertime_row->day;

            $items[]['day'] = $undertime_row->day;
        }

        echo "<pre>";
        print_r($items);


    }

请帮忙。

感谢。

2 个答案:

答案 0 :(得分:1)

问题在于$items = array();行。

就像现在一样,每个循环都会重新创建$item。在foreach结束之后,它只记住循环的最后一次迭代。

如果您想将所有数据保留在$item中,请在foreach循环前移动此行代码

答案 1 :(得分:0)

$items = array();
$i = 0;
foreach ($data['my_undertime'] as $undertime_row) {

        $datetimein = new DateTime($undertime_row->timein);
        $datetimein->format('h:m:s');

        $datetimeout = new DateTime($undertime_row->timeout);
        $datetimeout->format('h:m:s');



        if ($datetimein->format('h:m:s') > $undertime_row->beg_time && $datetimeout->format('h:m:s') < $undertime_row->end_time) {
            // echo $undertime_row->day;

            $items[$i]['day'] = $undertime_row->day;
        }
 $i++;



    }
       echo "<pre>";
        print_r($items);

试试这个