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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Календарь

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
kilogram
Отправлено: 31 Мая, 2012 - 22:23:15
Post Id


Частый гость


Покинул форум
Сообщений всего: 171
Дата рег-ции: Март 2012  


Помог: 0 раз(а)




В книге там прохожу немного даты и такой окд, вроде все верно написал, но он ругается на второй орич в конце кода непонятно почему.
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. //echo '<pre>'.print_r(getdate(),1).'</pre>';
  4. function Calendar($year,$month){
  5. $wday = JDDayofWeek(GregorianToJD($month,1,$year),0);
  6. if($wday == 0) $wday = 7;
  7. $n = - ($wday - 2);
  8. $cal = array();
  9.         for($j = 0; $j < 6; $j++){
  10.                 $row = array();
  11.                 $notEmpty = false;
  12.                 for($x = 0; $x < 7; $x++,$n++){
  13.                 if(checkdate($month,$n,$year)){
  14.                 $row[] = $n;
  15.                 $notEmpty = true;              
  16.                         } else{ $row = ''; }
  17.                 }
  18.         if(!$notEmpty) break;
  19.         $cal[] = $row;
  20.         }
  21.         return $cal;
  22. }
  23. //Формируем календарь на текущий месяц
  24. $now = getdate();
  25. $cal = Calendar($now['year'],$now['mon']-1);
  26. ?>
  27. <!-- Шаблон вывода календаря -->
  28. <table border="1">
  29.         <tr>
  30.                 <td>Пн</td>
  31.                 <td>Вт</td>
  32.                 <td>Ср</td>
  33.                 <td>Чт</td>
  34.                 <td>Пт</td>
  35.                 <td>Сб</td>
  36.                 <td style="color:red">Вс</td>
  37.         </tr>
  38.         <? foreach ($cal as $row) {?>
  39.         <tr>
  40.         <? foreach ($row as $i=>$v){?>
  41.         <td style="<?=$i==6?'color:red':''?>">
  42.                 <?=$v? $v : '&nbsp;'?>
  43.         </td>
  44.         <? } ?>
  45.         </tr>
  46.         <? } ?>
  47. </table>
  48.  


PHP:
скопировать код в буфер обмена
  1. Warning: Invalid argument supplied for foreach() in C:\www\htdocs\test.ru\www\index.php on line 39
 
 Top
sKaa
Отправлено: 31 Мая, 2012 - 22:30:39
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 979
Дата рег-ции: Окт. 2011  
Откуда: Россия г. Нижний Новгород


Помог: 25 раз(а)

[+]


kilogram, Откуда!!! Откуда берутся такие книги?? Кто их пишет это даже не интересно, а вот кто издает ...

Судя по ошибке вы пихнули в цикл что-то, что не является массивом ($row).

var_dump($row);
 
 Top
kilogram
Отправлено: 31 Мая, 2012 - 22:56:53
Post Id


Частый гость


Покинул форум
Сообщений всего: 171
Дата рег-ции: Март 2012  


Помог: 0 раз(а)




Я так понял из-за вот этого места может for($j = 0; $j < 6; $j++){
Если написать там for($j = 0; $j < 5; $j++){ тогда выведет без ошибки, но выведет не все рабочие дни этого месяца.
 
 Top
sKaa
Отправлено: 31 Мая, 2012 - 23:05:26
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 979
Дата рег-ции: Окт. 2011  
Откуда: Россия г. Нижний Новгород


Помог: 25 раз(а)

[+]


kilogram, можно еще попробовать не объявлять каждую итерацию цикла переменную $row = array();, шанс, что массив будет содержать всего одну пару "Ключ-Значение" после работы цикла чуть более чем 100%.

Объявите $row = array() до цикла for
 
 Top
kilogram
Отправлено: 31 Мая, 2012 - 23:10:50
Post Id


Частый гость


Покинул форум
Сообщений всего: 171
Дата рег-ции: Март 2012  


Помог: 0 раз(а)




Если до цикла фор, вообще что-то страшное выдает.
CODE (htmlphp):
скопировать код в буфер обмена
  1. Пн      Вт      Ср      Чт      Пт      Сб      Вс
  2. 1
  3. 1        2       3       4       5       6       7       8
  4. 1        2       3       4       5       6       7       8       9       10      11      12      13      14      15
  5. 1        2       3       4       5       6       7       8       9       10      11      12      13      14      15      16      17      18      19      20      21      22
  6. 1        2       3       4       5       6       7       8       9       10      11      12      13      14      15      16      17      18      19      20      21      22      23      24      25      26      27      28      29

(Добавление)
Вот взял исходник, нашел папку этого календаря и выдает что 1 июня это воскресенье, что за бред? Автор книги ошибся что ли?
Что может не правильно быть в коде, как-то странно. Вот оригинал автора с книги. Вот на сервер забросил результат http://santa[dot]comoj[dot]com/
PHP:
скопировать код в буфер обмена
  1. <?PHP ## Календарь на текущий месяц.
  2. // Функция формирует двумерный массив, представляющий собой
  3. // календарь на указанный месяц и год. Массив состоит из строк,
  4. // соответствующих неделям. Каждая строка - массив из семи
  5. // элементов, которые равны числам (или пустой строке, если
  6. // данная клетка календаря пуста).
  7. function makeCal($year, $month) {
  8.   // Получаем номер дня недели для 1 числа месяца. Корректируем
  9.   // его, чтобы воскресенье соответствовало числу 7, а не числу 0.
  10.   $wday = JDDayOfWeek(GregorianToJD($month, 1, $year), 0);
  11.   if ($wday == 0) $wday = 7;
  12.   // Начинаем с этого числа в месяце (если меньше нуля
  13.   // или больше длины месяца, тогда в календаре будет пропуск).
  14.   $n = - ($wday - 2);
  15.   $cal = array();
  16.   // Цикл по строкам.
  17.   for ($y=0; $y<6; $y++) {
  18.     // Будущая строка. Вначале пуста.
  19.     $row = array();
  20.     $notEmpty = false;
  21.     // Цикл внутри строки по дням недели.
  22.     for ($x=0; $x<7; $x++, $n++) {
  23.       // Текущее число >0 и < длины месяца?
  24.       if (checkdate($month, $n, $year)) {
  25.         // Да. Заполняем клетку.
  26.         $row[] = $n;
  27.         $notEmpty = true;
  28.       } else {
  29.         // Нет. Клетка пуста.
  30.         $row[] = "";
  31.       }
  32.     }
  33.     // Если в данной строке нет ни одного непустого элемента,
  34.     // значит, месяц кончился.
  35.     if (!$notEmpty) break;
  36.     // Добавляем строку в массив.
  37.     $cal[] = $row;
  38.   }
  39.   return $cal;
  40. }
  41.  
  42. // Формируем календарь на текущий месяц.
  43. $now = getdate();
  44. $cal = makeCal($now['year'], $now['mon']-1);
  45. ?>
  46. <!-- Шаблон вывода календаря. -->
  47. <table border=1>
  48.   <tr>
  49.     <td>Пн</td>
  50.     <td>Вт</td>
  51.     <td>Ср</td>
  52.     <td>Чт</td>
  53.     <td>Пт</td>
  54.     <td>Сб</td>
  55.     <td style="color:red">Вс</td>
  56.   </tr>
  57.   <!-- цикл по строкам -->
  58.   <?foreach ($cal as $row) {?>
  59.     <tr>
  60.       <!-- цикл по столбам -->
  61.       <?foreach ($row as $i=>$v) {?>
  62.         <!-- воскресенье - "красный" день -->
  63.         <td style="<?=$i==6? 'color:red' : ''?>">
  64.           <?=$v? $v : "&nbsp;"?>
  65.         </td>
  66.       <?}?>
  67.     </tr>
  68.   <?}?>
  69. </table>
  70.  
 
 Top
kilogram
Отправлено: 01 Июня, 2012 - 20:25:53
Post Id


Частый гость


Покинул форум
Сообщений всего: 171
Дата рег-ции: Март 2012  


Помог: 0 раз(а)




Вроде работает, не совсем въехал в эту строку, объясните её если кто может.

 
 Top
kilogram
Отправлено: 01 Июня, 2012 - 23:41:54
Post Id


Частый гость


Покинул форум
Сообщений всего: 171
Дата рег-ции: Март 2012  


Помог: 0 раз(а)




Вроде разобрался, возращается день недели, а вот здесь Не могу понять, почему здесь -2?
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Работа с файловой системой и файлами »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB