首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用for for的Foreach并不会迭代每个元素。

使用for for的Foreach并不会迭代每个元素。
EN

Stack Overflow用户
提问于 2013-10-17 12:49:29
回答 1查看 93关注 0票数 0

下面是循环:

代码语言:javascript
复制
         foreach($event['Event']['user_id'] as $employee){


     for($date; $date <= $end_date; $date = strtotime("+1 day", $date))
     {
         if(strpos($weekdays, date("N", $date)) !== false){
             $real_date = date("Y-m-d", $date);
             $event['Event']['date'] = $real_date;
             $event['Event']['user_id'] = $employee;
             $this->Event->create();
             $this->Event->save($event);
            debug($event['Event']['user_id']);           
         }
     }

    }

*$event'Event'*内容如下:

代码语言:javascript
复制
array(
(int) 0 => '23',
(int) 1 => '24',
(int) 2 => '27',
(int) 3 => '28')

如果我试图在for循环之前打印每个$employee,则会打印所有四条记录,但是for循环只应用于第一条记录。任何帮助都是非常感谢的。

编辑:添加pr($event)的结果

代码语言:javascript
复制
Array([Event] => Array
    (
        [project_id] => 62
        [user_id] => Array
            (
                [0] => 23
                [1] => 24
                [2] => 27
                [3] => 28
                [4] => 29
            )

        [hours] => 4
        [minutes] => 0
        [assignment] => 
        [material] => 
        [date] => 2013-10-6
        [start_time] => Array
            (
                [hour] => 09
                [min] => 00
            )

        [finish_time] => Array
            (
                [hour] => 13
                [min] => 00
            )

        [repeat] => 0
        [finish_date] => 
        [weekdays] => 
    )

)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-17 16:41:19

让我们看看,在for的第一个循环中,您可以执行以下操作

代码语言:javascript
复制
 for($date; $date <= $end_date; $date = strtotime("+1 day", $date))
 {
     if(strpos($weekdays, date("N", $date)) !== false){
         $real_date = date("Y-m-d", $date);
         $event['Event']['date'] = $real_date;
         $event['Event']['user_id'] = $employee;
         $this->Event->create();
         $this->Event->save($event);
        debug($event['Event']['user_id']);           
     }
 }

该特殊情况下的$employee数组是23 (参见您发布的示例)。注意if语句中的特定行。

代码语言:javascript
复制
$event['Event']['user_id'] = $employee;

所以基本上,$event['Event']['user_id']不再是

代码语言:javascript
复制
$event['Event']['user_id'] = array(
(int) 0 => '23',
(int) 1 => '24',
(int) 2 => '27',
(int) 3 => '28')

代码语言:javascript
复制
$event['Event']['user_id'] = 23;

而不是。因此,foreach函数只应用于第一条记录,然后停止。我不建议在foreach中更改foreach参数(就像本例中的那样),它总是(或者几乎总是)导致混淆。

由于我不知道您要用这个函数做什么,所以我不能给您更多的建议,而是重新考虑修复这个函数的逻辑。可能是一个简单的变量,比如

代码语言:javascript
复制
$users = $event['Event']['user_id'];
foreach ($users as $employee) {
    /* the rest remains the same*/
}

就够了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19427221

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档