Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Не срабатывает сравнение
Форумы портала PHP.SU » » Если скрипт не работает » Не срабатывает сравнение

Страниц (1): [1]
 

1. spolischook - 08 Августа, 2011 - 15:04:50 - перейти к сообщению
Всем привет. Это моя первая тема, прошу не судить строго.
У меня проблема, и я уже отчаялся. Бьюсь уже не первый день.
Код:
CODE (htmlphp):
скопировать код в буфер обмена
  1. foreach($this->categories as $key=>$value){
  2.         if ($key == 1) {
  3.                 echo $this->i." ParentNright - "; var_dump($this->categories[$key]['nright']); echo " value[nright] = "; var_dump($value['nright']); echo "<br />";
  4.         }  
  5.         if ((int)$value['nright'] == (int)$this->categories[(int)$this->parent_id]['nright']t){
  6.                 $this->categories[$key]['nright'] = $this->categories[$key]['nright'] + 2;
  7.                 echo ($key == 1) ?  "YESS!!!<br />" : '';
  8.         }
  9. }

$this->i - счетчик вхождений.
Вывод следующий:
CODE (htmlphp):
скопировать код в буфер обмена
  1. 1 ParentNright - string(1) "8" value[nright] = string(1) "8"
  2. YESS!!!
  3. 2 ParentNright - int(10) value[nright] = int(10)
  4. 3 ParentNright - int(10) value[nright] = int(10)
  5. 4 ParentNright - int(10) value[nright] = int(10)
  6. YESS!!!
  7. 5 ParentNright - int(12) value[nright] = int(12)
  8. 6 ParentNright - int(12) value[nright] = int(12)
  9. 7 ParentNright - int(12) value[nright] = int(12)
  10. 8 ParentNright - int(12) value[nright] = int(12)
  11. 9 ParentNright - int(12) value[nright] = int(12)
  12. 10 ParentNright - int(12) value[nright] = int(12)
  13. 11 ParentNright - int(12) value[nright] = int(12)
  14. 12 ParentNright - int(12) value[nright] = int(12)
  15. 13 ParentNright - int(12) value[nright] = int(12)
  16. 14 ParentNright - int(12) value[nright] = int(12)
  17. YESS!!!
  18. 15 ParentNright - int(14) value[nright] = int(14)
  19. 16 ParentNright - int(14) value[nright] = int(14)
  20. 17 ParentNright - int(14) value[nright] = int(14)
  21. 18 ParentNright - int(14) value[nright] = int(14)
  22. 19 ParentNright - int(14) value[nright] = int(14)
  23. 20 ParentNright - int(14) value[nright] = int(14)
  24. 21 ParentNright - int(14) value[nright] = int(14)
  25. 22 ParentNright - int(14) value[nright] = int(14)
  26. 23 ParentNright - int(14) value[nright] = int(14)
  27. 24 ParentNright - int(14) value[nright] = int(14)
  28. 25 ParentNright - int(14) value[nright] = int(14)
  29. 26 ParentNright - int(14) value[nright] = int(14)
  30. 27 ParentNright - int(14) value[nright] = int(14)
  31. YESS!!!
  32. 28 ParentNright - int(16) value[nright] = int(16)
  33. ....... и т. д.

Каждый раз он сравнивает два значения и как будто бы не видит их равенства, и в один прекрассный момент он замечает что переменные таки равны.
Как видите типы данных также не отличаются. Я уже измотался вовсе, спать толком не могу. Помогите, в чем может быть проблема.
2. EuGen - 08 Августа, 2011 - 15:11:03 - перейти к сообщению
Ключевое сравнение, я думаю, $key==1 - у Вас ведь в зависимости от этого строится логика (в том числе, вывода "YES") - точнее сказать трудно, так как нет набора данных.
3. spolischook - 08 Августа, 2011 - 15:50:37 - перейти к сообщению
EuGen пишет:
Ключевое сравнение, я думаю, $key==1 - у Вас ведь в зависимости от этого строится логика (в том числе, вывода "YES") - точнее сказать трудно, так как нет набора данных.

Проводя рефакторинг, скрипт наполовину заработал, попробую отыскать правду, в сравнении со старым кодом...
(Добавление)
Ошибка детская. Растерялся
Дело в том что в коде я сравниваю
$this->categories[(int)$this->parent_id]['nright']
а вывожу в хтмл:
$this->categories[$key]['nright']
из-за этого не мог понять почему он не входит в месте условия if
Далее интереснее...
В первый раз он выводит:
string(1) "8"
а в дальнейшем после добавления 2 он становится:
int(10)
Но уже поздно, т.к. при сравнении разных типов условие if даст отрицательный результат.
Не вдаваясь в детали, проблема была в неправильно хранящемся типе данных, а путаница из-за неправильной отладки выводившейся в хтмл.
Спасибо EuGen что не оставил тему без внимания, к сожалению кнопка спасибо не работает, я еще не так много сообщений написал.

 

Powered by ExBB FM 1.0 RC1