Переменная недоступна вне цикла FOR - PullRequest
0 голосов
/ 23 сентября 2011

Мне нужно получить первый и последний день предыдущей недели. Я использую приведенный ниже код, и он работает нормально, пока я не попытаюсь прочитать переменную вне цикла.

<?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, и все говорят мне, что это должно работать. Кто-нибудь может пролить свет на это?

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 23 сентября 2011

$ 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 - 

Надеюсь, это поможет

0 голосов
/ 23 сентября 2011

Вы перезаписываете переменную $firstday в следующих итерациях цикла, поэтому в конце она содержит null.

Если вы включите отчеты об ошибках, вы увидите, что уведомления генерируются из итерацийс $i > 1, при доступе к $temp[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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...