【问题标题】:Variable not available outside FOR loop变量在 FOR 循环外不可用
【发布时间】:2011-09-22 22:09:59
【问题描述】:

我需要获取前一周的第一个和最后一个日期。我使用下面的代码,它工作正常,直到我尝试在循环外读取变量。

<?php
$current_week = date(W);
$previous_week = $current_week - 1;
$year = date(o);
for($day=1; $day<=7; $day++) {
  $temp = array ($day => date('Y-m-d', strtotime($year."W".$previous_week.$day)) . '   00:00:00');
  $firstday = $temp[1];
  // echo here works fine
  echo $firstday;
}

// echo here doesnt work anymore
echo $firstday;
?>

我真的不知道为什么这不起作用。我已经阅读了 PHP 文档,一切都告诉我它应该可以工作。我一点也不笨,现在我真的很困惑。任何人都可以对此有所了解吗?

提前致谢!

【问题讨论】:

    标签: php variables date for-loop


    【解决方案1】:

    $firstDay 正在被重用和覆盖:

    <?php
    $current_week = date(W);
    $previous_week = $current_week - 1;
    $year = date(o);
    for($day=1; $day<=7; $day++) {
      $temp = array ($day => date('Y-m-d', strtotime($year."W".$previous_week.$day)) . '   00:00:00');
      $firstday = $temp[1];
      // echo here works fine
      echo "Inloop - ".$firstday."\n";
    }
    
    // echo here doesnt work anymore
    echo "After loop - ".$firstday."\n";
    ?>
    
    Results:
    Inloop - 2011-09-12   00:00:00
    Inloop - 
    Inloop - 
    Inloop - 
    Inloop - 
    Inloop - 
    Inloop - 
    After loop - 
    

    希望对你有帮助

    【讨论】:

    • 谢谢!这帮助我解决了问题:)
    【解决方案2】:

    您在循环的后续迭代中覆盖了$firstday 变量,因此它最后包含null

    如果您打开错误报告,您将在访问$temp[1] 时看到由$i &gt; 1 迭代生成的通知

    您应该始终在开发和学习时打开错误报告,并且您应该(或最好必须)在发布代码之前解决所有警告。

    以下是脚本中的警告,其中 error_reporting 设置为 E_ALL

    > php /tmp/foo.php 2>&1 | grep Notice
    PHP Notice:  Use of undefined constant W - assumed 'W' in /private/tmp/foo.php on line 3
    Notice: Use of undefined constant W - assumed 'W' in /private/tmp/foo.php on line 3
    PHP Notice:  Use of undefined constant o - assumed 'o' in /private/tmp/foo.php on line 5
    Notice: Use of undefined constant o - assumed 'o' in /private/tmp/foo.php on line 5
    2011-09-12   00:00:00PHP Notice:  Undefined offset: 1 in /private/tmp/foo.php on line 8
    Notice: Undefined offset: 1 in /private/tmp/foo.php on line 8
    PHP Notice:  Undefined offset: 1 in /private/tmp/foo.php on line 8
    Notice: Undefined offset: 1 in /private/tmp/foo.php on line 8
    PHP Notice:  Undefined offset: 1 in /private/tmp/foo.php on line 8
    Notice: Undefined offset: 1 in /private/tmp/foo.php on line 8
    PHP Notice:  Undefined offset: 1 in /private/tmp/foo.php on line 8
    Notice: Undefined offset: 1 in /private/tmp/foo.php on line 8
    PHP Notice:  Undefined offset: 1 in /private/tmp/foo.php on line 8
    Notice: Undefined offset: 1 in /private/tmp/foo.php on line 8
    PHP Notice:  Undefined offset: 1 in /private/tmp/foo.php on line 8
    Notice: Undefined offset: 1 in /private/tmp/foo.php on line 8
    

    【讨论】:

    • 谢谢!这帮助我解决了问题:)
    • @SjaakdeVries 查看我对答案的更新并应用我的建议以便从您的错误中学习。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-05
    • 2020-04-21
    • 2016-05-06
    • 2018-09-28
    • 2019-02-02
    • 1970-01-01
    相关资源
    最近更新 更多