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 точнее сопоставления цифр дням недели - PHP

 PHP.SU

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


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

> Описание: Друзья помогите пожалуйста с календарём php точнее сопоставления цифр дням недели - PHP
genadich
Отправлено: 23 Ноября, 2017 - 13:01:08
Post Id


Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Нояб. 2017  


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




Ситуация такая есть дни недели Понедельник ей сопоставлена цифра 2, вторник цифра 4, среда цифра 8, четверг цифра 16, пятница цифра 32, суббота цифра 64 и воскресенье цифра 1. Как при получении цифры 14 из переменной вывести " Понедельник, Вторник, Среда " Сочетаний дней очень много я сделал так : просьба не гнобить я только учусь.
PHP:
скопировать код в буфер обмена
  1.  
  2. $repeat = "66";
  3.         if ($repeat == "2"){ $rep = "Понедельник"; } if ($repeat == "4"){ $rep = "Вторник"; } if ($repeat == "8"){ $rep = "Среда"; }
  4.         if ($repeat == "16"){ $rep = "Четверг"; } if ($repeat == "32"){ $rep = "Пятница"; } if ($repeat == "64"){ $rep = "Суббота"; } if ($repeat == "1"){ $rep = "Воскресенье"; }
  5.         if ($repeat == "6"){ $rep = "Понедельник, вторник"; } if ($repeat == "10"){ $rep = "Понедельник, среда";} if ($repeat == "18"){ $rep = "Понедельник, четверг";}
  6.         if ($repeat == "34"){ $rep = "Понедельник, пятница";} if ($repeat == "66"){ $rep = "Понедельник, суббота";} if ($repeat == "3"){ $rep = "Понедельник, воскресенье";}
  7.         if ($repeat == "12"){ $rep = "Вторник, среда"; } if ($repeat == "20"){ $rep = "Вторник, четверг";} if ($repeat == "36"){ $rep = "Вторник, пятница";}
  8.         if ($repeat == "68"){ $rep = "Вторник, суббота";} if ($repeat == "5"){ $rep = "Вторник,воскресенье";} if ($repeat == "24"){ $rep = "Среда, четверг";}
  9.         if ($repeat == "40"){ $rep = "Среда, пятница";} if ($repeat == "72"){ $rep = "Среда, суббота";} if ($repeat == "9"){ $rep = "Среда, воскресенье";}  if ($repeat == "48"){ $rep = "Четверг, пятница";}
  10.         if ($repeat == "80"){ $rep = "Четверг, суббота";} if ($repeat == "17"){ $rep = "Четверг, воскресенье";} if ($repeat == "96"){ $rep = "Пятница, суббота";} if ($repeat == "33"){ $rep = "Пятница, воскресенье";}
  11.         if ($repeat == "65"){ $rep = "Суббота, воскресенье";}
  12.         echo $rep;
  13.  

Но так код получается очень огромным и думаю не правильным, помогите пожалуйста с решением))))Читал про массивы но так и не понял как складывать цифры сопоставленные дням((((
 
 Top
Мелкий Супермодератор
Отправлено: 23 Ноября, 2017 - 13:22:36
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


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




genadich пишет:
Понедельник ей сопоставлена цифра 2, вторник цифра 4, среда цифра 8, четверг цифра 16, пятница цифра 32, суббота цифра 64 и воскресенье цифра 1

Закономерность не наблюдаете? Каждое следующее значение в 2 раза больше предыдущего?
А жаль. Это простая битовая маска.

PHP:
скопировать код в буфер обмена
  1. $weekdays = [
  2.     1 => 'вс',
  3.     2 => 'пн',
  4.     4 => 'вт',
  5.     8 => 'ср',
  6.     16 => 'чт',
  7.     32 => 'пт',
  8.     64 => 'сб',
  9. ];
  10. $value = 14;
  11.  
  12. foreach ($weekdays as $bit => $day) {
  13.     if ($value & $bit) {
  14.         echo $day, ',';
  15.     }
  16. }


-----
PostgreSQL DBA
 
 Top
genadich
Отправлено: 23 Ноября, 2017 - 13:33:53
Post Id


Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Нояб. 2017  


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




Закономерность наблюдал, но знаний не хватило, я только начинаю))))Огромное спасибо)))
 
 Top
genadich
Отправлено: 29 Ноября, 2017 - 22:06:53
Post Id


Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Нояб. 2017  


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




Мелкий Доброго времени суток, не могли бы Вы еще помочь, у меня в таблице не выводит все дни,то есть когда к примеру выбрано 127 это вся неделя он выводит только последний день "Воскресенье", я понимаю почему это происходит, но не понимаю как решить эту проблему.Хотя бы направьте в какую сторону копать. Готов выделить на пиво или печеньки ))))
CODE (html):
скопировать код в буфер обмена
  1. <html>
  2. <head>
  3. <meta charset="UTF-8">
  4. <title>...</title>
  5. </head>
  6. <body>
  7. <table>
  8. <tr>
  9.  <th align="center" >ID</th>
  10.  <th align="center">День</th>
  11. </tr>
  12.  

PHP:
скопировать код в буфер обмена
  1. $id = "1";
  2. $value = "127";
  3.  $weekdays = [
  4.   2 => 'пн',
  5.   4 => 'вт',
  6.   8 => 'ср',
  7.   16 => 'чт',
  8.   32 => 'пт',
  9.   64 => 'сб',
  10.   1 => 'вс',
  11.   ];
  12.                                  
  13.     foreach ($weekdays as $bit => $day) {
  14.      if ($value & $bit) {
  15.         echo $id, "\n", '|', "\n", $day, '</br>';
  16.         }
  17. }
  18.   echo '<tr><td>'.$id.'</td><td>'.$day.'</td></tr>';

CODE (html):
скопировать код в буфер обмена
  1.  
  2. </table>
  3. </body>
  4. </html>

(Отредактировано автором: 29 Ноября, 2017 - 22:11:36)

 
 Top
Мелкий Супермодератор
Отправлено: 29 Ноября, 2017 - 22:39:30
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


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




genadich пишет:
$value = "127";

Это некорректно, хоть судя по всему неявное приведение типов спасает. Должно быть

Впрочем, к вопросу не относится.

Какой результат надо получить? Перечисление в одном поле таблицы? Вывод 7 строк с подсветкой совпавших, вывод только совпавших с маской дней по одному на строку, ещё как-то?


-----
PostgreSQL DBA
 
 Top
genadich
Отправлено: 29 Ноября, 2017 - 22:50:49
Post Id


Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Нояб. 2017  


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




Мелкий Хотелось бы получить результат, в одном поле таблицы вывод при
"пн,вт,ср,чт,пт,сб,вс" ну и так далее вывод в одном поле "пн,ср,пт".

(Отредактировано автором: 29 Ноября, 2017 - 22:58:06)

 
 Top
Мелкий Супермодератор
Отправлено: 29 Ноября, 2017 - 23:01:02
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


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




Тогда вам необходимо или переместить цикл между td и выводить там или использовать какую-то переменную, в которую будут записаны все дни. Например,

PHP:
скопировать код в буфер обмена
  1. $result = [];
  2. foreach ($weekdays as $bit => $day) {
  3.      if ($value & $bit) {
  4.         $result[] = $day;
  5.         }
  6. }
  7.  
  8. echo '<tr><td>'.$id.'</td><td>'.join(', ', $result).'</td></tr>';


-----
PostgreSQL DBA
 
 Top
genadich
Отправлено: 29 Ноября, 2017 - 23:40:58
Post Id


Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Нояб. 2017  


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




Мелкий Спасибо, скиньте в личку номер карты или ном тел, я переведу на печеньки или пиво, Вы мне очень помогли))) По поводу типов о которых Вы писали выше тоже спасибо примерно понял когда они нужны а когда нет))))
 
 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