【问题标题】:PHP- For loop not being accessedPHP-未访问 For 循环
【发布时间】:2017-06-01 10:41:43
【问题描述】:

所以我有以下 for 循环:

$arr = [];
for($x = date('j', strtotime('this week')); $x <= date('j', strtotime('this week + 6 days')); $x++)
            {
                dd('test');
                $arr[$x] = [
                    'y' => $x,
                    's' => 0,
                    'c' => 0,
                    'cl' => 0
                ];
            }
            dd('test2');

问题是循环从未被访问过...... dd() 返回 'test2' 但 for 循环未被访问并且它不返回任何错误。 我也有类似的:

for($x = 1; $x <= date('t', strtotime('today')); $x++)
            {
                $arr[$x] = [
                    'y' => $x . ' ' . date('M', strtotime('today')),
                    's' => 0,
                    'c' => 0,
                    'cl' => 0
                ];
            }

而且这个工作完美。我要做的是根据本周的天数或在以下情况下根据本月的天数为 $arr 生成索引。我只是不明白为什么一个有效而另一个无效。 感谢大家的时间和帮助!

【问题讨论】:

  • 我会 var_dump date('j', strtotime('this week')) 看看你得到了什么 val
  • 我很确定“本周”不是你想要的。你想达到什么目的?
  • 我尝试根据本周的天数来实现一个带键的数组。 date('j', strtotime('this week')) 返回 29
  • 嗨,Alphonse,您的问题解决了吗?如果是,请将其标记为已解决,以帮助保持 S.O 清洁和其他有相同问题的人。谢谢!

标签: php


【解决方案1】:

你有什么:

$x = date('j', strtotime('this week')); //returns 29

$x <= date('j', strtotime('this week + 6 days')) // returns 4

并且永远不要进入循环(操作是:29

如果您将j 更改为z(在PHP 官方文档中的日期:

一年中的某一天(从 0 开始)

) 你将获得:

x: 148 < x: 154

然后,在循环内,您可以使用j 来存储星期几,循环就会起作用。

如果您想在 2 个日期之间移动,添加天数,还有其他解决方案,例如:How to count days between two dates in PHP?

希望对你有帮助!

【讨论】:

  • 一年中的某一天在 12 月的最后一周无效。
  • 它可以工作,但计数从 0 开始。如果你想处理日期,PHP 有一个非常强大的选项,包括日期、strtotime 等等。您甚至可以使用闰年或知道一个月中的哪一天是 1893 年 2 月 2 日(例如)。也许这里的解决方案是在 for 中使用纯日期,例如(在伪代码中): x=date(now); x
  • 在一年的最后一周,它会尝试从 360 循环到 2,这与使用当月的某一天从 29 到 4 有同样的问题。跨度>
  • 谢谢!由于您的解释,我找到了一种调整代码的方法。
【解决方案2】:
$date = new DateTime('this week Sunday');
$endDate = new DateTime('this week Saturday');

while( $date<=$endDate ){
   // do some stuff
   // ...

   $date->modify('+1 day');
}

【讨论】:

  • 您能否解释一下您的解决方案在做什么,而不是仅仅粘贴一段代码
  • 这是非常不言自明的,这里没有什么花哨的,只是使用 DateTime 类和 while 循环循环当前一周的几天,循环将在到达星期六后停止执行并使用 $date 对象作为参考。
【解决方案3】:

解决方案由 @JP 找到。 Aulet的解释:

for($x = 0; $x <= 6; $x++)
            {
                $date = date('j', strtotime('this week +' .$x . 'days'));
                $arr[$date] = [
                    'y' => $date,
                    's' => 0,
                    'c' => 0,
                    'cl' => 0
                ];
            }

【讨论】:

    猜你喜欢
    • 2021-04-11
    • 2015-09-05
    • 1970-01-01
    • 1970-01-01
    • 2018-02-27
    • 1970-01-01
    • 1970-01-01
    • 2021-04-07
    • 1970-01-01
    相关资源
    最近更新 更多