【问题标题】:PHP for loop - how to escape first iteration?PHP for 循环 - 如何逃避第一次迭代?
【发布时间】:2023-06-25 18:01:01
【问题描述】:

鉴于这个 PHP for 循环

$row->frequency = 1;
$row->date_1 = 10000;
$row->interval = 86400;


    for ($i = 0; $i <= $row->frequency; $i++) {

        $cal_data[] = array(

            'start' => strtotime($row->date_1) + $row->interval,

            );
    }

我希望循环的第一次迭代忽略 + $row-&gt;interval 给我的结果:

10000
96400

我已经看到使用模数完成此操作,但无法在此处使用。有人有建议吗?

谢谢!

【问题讨论】:

  • 数字10000strtotime 的有效输入吗?你想做什么?如果你只做一两件事,为什么要使用循环呢?
  • 10000 只是简化问题的一个例子
  • 正如@sdleihssirhc 建议的那样,10,000 确实无效 - 也许用有效数据更新问题?

标签: php loops for-loop iteration


【解决方案1】:

使用+ ($i ? $row-&gt;interval : 0)

换句话说,如果 $i 为零 - 第一次迭代 - 添加 0 而不是 $row-&gt;interval。这是三元运算符(condition ? iftrue : iffalse),它大致相当于if/else 构造,只是它可以在语句中使用。

【讨论】:

  • 由于某种原因,当 $row-&gt;frequency 为例如 5 时,循环会生成意外结果 => 10000, 96400, 96400, 96400, 96400 而不是每次迭代都递增 - 知道为什么会这样吗?
【解决方案2】:
for ($i = 0; $i <= $row->frequency; $i++) {
    if ($i == 0) {
          $val = strtotime($row->date_1) ;
    } else {
       $val = strtotime($row->date_1) + $row->interval;
    }
    $cal_data[] = array(

        'start' => $val

        );
}

【讨论】:

  • 感谢@scott - 我想我会选择上面的三元组,它的简洁在这里似乎很合适
  • 类似于我上面对@alexander 的评论,您的代码会产生同样的问题:当 $row->frequency 例如为 5 时,循环会产生意外结果 => 10000, 96400, 96400, 96400, 96400 而不是递增每次迭代
  • 这正是我所期望的——你没有改变 $row->interval 或 $row->date_1。为什么总和会改变?
  • 你是对的 - 我希望 $row-&gt;interval 随着循环的进行而累积增加,例如 10000, 96400, 182800, etc - 我怎么能得到它?
  • strtotime($row-&gt;date_1) + ($i ? ($row-&gt;interval * $i) : 0) 做我想做的事
最近更新 更多