2016-10-28 5 views
0

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

while ($k < $dateCount) { 
     echo $k." ==> ".$forecastData[$k]['Booked Date']." ==> ".$startDate."<br>"; 
     if($forecastData[$k]['Booked Date'] == $startDate){ 
      echo $k." ==> YAY<br>"; 
     } 
     else{ 
      echo $k." ==> boo ==> ".$startDate."<br>"; 
     } 
     $k++; 
     $startDate = date('Y-m-d', strtotime("+1 day", strtotime($startDate))); 
    } 

$ к является ключевым массив -> начинается с 0;

$ dateCount является размер массива (чтобы остановить его на 31 дней, или сколь угодно долго диапазон)

$ forecastData многомерный массив всех данных о продажах на сегодняшний день. - содержит множество информации для этой даты, включая дату регистрации, которая является днем, в который хранится информация.

$ STARTDATE является дата, была введена в конвертированные в тот же день в прошлом году - в этом случае дата положить в это 1 октября 2016 и преобразованный дата 26 сентября 2015

Я хочу сказать, что если даты равны, то эхо-номер массива со словом YAY иначе эхо-номер массива со словом boo.

K увеличивается на 1 за цикл, как и на дату.

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

То, что я не могу понять, что это выход:

0 ==> 2015-09-26 ==> 2015-09-26

0 ==> бух ==> 2015-09-26

1 ==> 2015-09-27 ==> 2015-09-27

1 ==> YAY

2 ==> == 2015-09-28 > 2015-09-28

2 ==> YAY

3 ==> 2015-09-29 ==> 2015-09-29

3 ==> YAY

4 ==> 2015-09 -30 ==> 2015-09-30

4 ==> YAY

5 ==> 2015-10-01 ==> 2015-10-01

5 ==> YAY

6 ==> 2015-10-02 ==> 2015-10-02

6 ==> YAY

7 ==> 2015-10-03 ==> 2015-10-03

7 ==> YAY

8 ==> 2015-10-04 ==> 2015-10-04

8 ==> YAY

9 ==> 2015-10 -05 ==> 2015-10-05

9 ==> YAY

10 ==> 2015-10-06 ==> 2015-10-06

10 ==> YAY

11 ==> 2015-10 -07 ==> 2015-10-07

11 ==> YAY

Первый не имеет смысла для меня ?? Он делает то, что нужно, но по какой-то причине пропускает это? Кроме того, если я жестко укажу дату, тогда она будет работать.

Я пытался понять это так долго теперь, что любые идеи помогут

Спасибо

+1

попробуйте использовать 'var_dump()' вместо эха для получения более подробной информации (переменный типа и т.д.) - также: как вы определяете $ STARTDATE перед входом цикл? –

+0

Угадайте: в первой строке даты есть трейлинг-пространство или другой невидимый символ ... – deceze

+0

Показать начальное объявление '$ startDate' – Justinas

ответ

1

С вашего выхода я вижу, что выделение 2015-09-26 также выбрать конечные пробелы в то время как выделение 2015-09-27 не имеет завершающую пространство.

Значок: 2015-09-26! = 2015-09-26_. Используйте trim($startDate) или просто проверьте, откуда идет это завершающее пробел.

Также при отладке лучше использовать var_dump($startDate); => string(11) "2015-09-26 ". Таким образом, вы также увидите длину строки.


Из личного опыта
сравнивал hello к hello это ей не удалось. Оказывается var_dump($var); показывает hello длину, 10. Дальнейшие исследования показали, что это \0h\0e\0l\0l\0o

+0

Да, спасибо за это - я тоже это сделал, и он сделал то же самое. Я не могу понять, почему он это сделал, когда каждый раз получал одно и то же? – Andrew

+0

проклятье. тоже была моя первая мысль, но не смогла ее подтвердить. SO-форматирование удалило это конечное пространство, оно было видно только при вводе функциональности редактирования. –

+0

@ Андроверьте свой '$ this-> getLastYearDate ($ start)', если он где-то вводит пробел. вероятно, 'date ('Y-m-d')' или что-то –

Смежные вопросы