За последние 24 часа нас посетили 23800 программистов и 1737 роботов. Сейчас ищут 1843 программиста ...

Не могу сообразить.

Тема в разделе "Вопросы от блондинок", создана пользователем zhen, 12 фев 2011.

Статус темы:
Закрыта.
  1. zhen

    zhen Активный пользователь

    С нами с:
    12 фев 2007
    Сообщения:
    37
    Симпатии:
    0
    В общем хотел создать скрипт, выводящий все возможные даты начиная с 1970 года по 2012 год, причем в слитном варианте написания, учитывающий возможность указать год как двумя цифрами так и четырьмя, и учитывающий возможность написать как на первом месте день, так и месяц. с виду ничего сложного, код на мой взгляд тоже верен, но вот в браузере выводится совсем не то что ожидаю ((( Помогите найти подводный камень.
    PHP:
    1. <?php
    2.  
    3. for ($i=1;$i<=31;$i++) {         // дни
    4. for ($j=1;$j<=12;$j++) {        // месяцы
    5. for ($k=70;$k<=99;$k++) {    // годы
    6.  
    7. $i0=$i; // сохраняем оригинальные значения
    8. $j0=$j; // переменных i и j
    9.  
    10. if ($i=1) { $i="01"; }
    11. if ($i=2) { $i="02"; }
    12. if ($i=3) { $i="03"; }
    13. if ($i=4) { $i="04"; } // конвертируем их значения
    14. if ($i=5) { $i="05"; } // в двухзначную форму
    15. if ($i=6) { $i="06"; }
    16. if ($i=7) { $i="07"; }
    17. if ($i=8) { $i="08"; }
    18. if ($i=9) { $i="09"; }
    19.  
    20. if ($j=1) { $j="01"; }
    21. if ($j=2) { $j="02"; }
    22. if ($j=3) { $j="03"; }
    23. if ($j=4) { $j="04"; }
    24. if ($j=5) { $j="05"; }
    25. if ($j=6) { $j="06"; }
    26. if ($j=7) { $j="07"; }
    27. if ($j=8) { $j="08"; }
    28. if ($j=9) { $j="09"; }
    29.  
    30. echo("$i$j$k<br>"); // выводим дату: число-месяц-год (год двузначный с 70 по 99)
    31.  
    32. $i=$i0; // востанавливаем оригинальные
    33. $j=$j0; // значения переменных i и j
    34.  
    35. }}}
    36.  
    37. for ($i=1;$i<=12;$i++) {
    38. for ($j=13;$j<=31;$j++) {     // начинаем с 13 чтобы не повторяться в датах
    39. for ($k=70;$k<=99;$k++) {
    40.  
    41. $i0=$i;
    42. $j0=$j;
    43.  
    44. if ($i=1) { $i="01"; }
    45. if ($i=2) { $i="02"; }
    46. if ($i=3) { $i="03"; }
    47. if ($i=4) { $i="04"; }
    48. if ($i=5) { $i="05"; }
    49. if ($i=6) { $i="06"; }
    50. if ($i=7) { $i="07"; }
    51. if ($i=8) { $i="08"; }
    52. if ($i=9) { $i="09"; }
    53.  
    54. if ($j=1) { $j="01"; }
    55. if ($j=2) { $j="02"; }
    56. if ($j=3) { $j="03"; }
    57. if ($j=4) { $j="04"; }
    58. if ($j=5) { $j="05"; }
    59. if ($j=6) { $j="06"; }
    60. if ($j=7) { $j="07"; }
    61. if ($j=8) { $j="08"; }
    62. if ($j=9) { $j="09"; }
    63.  
    64. echo("$i$j$k<br>"); //  дата: месяц-число-год (год двузначный с 70 по 99)
    65.  
    66. $i=$i0;
    67. $j=$j0;
    68.  
    69. }}}
    70.  
    71. for ($i=1;$i<=31;$i++) {
    72. for ($j=1;$j<=12;$j++) {
    73. for ($k=0;$k<=12;$k++) {
    74.  
    75. $i0=$i;
    76. $j0=$j;
    77. $k0=$k;
    78.  
    79. if ($i=1) { $i="01"; }
    80. if ($i=2) { $i="02"; }
    81. if ($i=3) { $i="03"; }
    82. if ($i=4) { $i="04"; }
    83. if ($i=5) { $i="05"; }
    84. if ($i=6) { $i="06"; }
    85. if ($i=7) { $i="07"; }
    86. if ($i=8) { $i="08"; }
    87. if ($i=9) { $i="09"; }
    88.  
    89. if ($j=1) { $j="01"; }
    90. if ($j=2) { $j="02"; }
    91. if ($j=3) { $j="03"; }
    92. if ($j=4) { $j="04"; }
    93. if ($j=5) { $j="05"; }
    94. if ($j=6) { $j="06"; }
    95. if ($j=7) { $j="07"; }
    96. if ($j=8) { $j="08"; }
    97. if ($j=9) { $j="09"; }
    98.  
    99. if ($k=0) { $k="00"; }
    100.  
    101. echo("$i$j$k<br>"); // дата: число-месяц-год (год двузначный с 00 по 12)
    102.  
    103. $i=$i0;
    104. $j=$j0;
    105. $k=$k0;
    106.  
    107. }}}
    108.  
    109. for ($i=1;$i<=12;$i++) {
    110. for ($j=13;$j<=31;$j++) {
    111. for ($k=0;$k<=12;$k++) {
    112.  
    113. $i0=$i;
    114. $j0=$j;
    115. $k0=$k;
    116.  
    117. if ($i=1) { $i="01"; }
    118. if ($i=2) { $i="02"; }
    119. if ($i=3) { $i="03"; }
    120. if ($i=4) { $i="04"; }
    121. if ($i=5) { $i="05"; }
    122. if ($i=6) { $i="06"; }
    123. if ($i=7) { $i="07"; }
    124. if ($i=8) { $i="08"; }
    125. if ($i=9) { $i="09"; }
    126.  
    127. if ($j=1) { $j="01"; }
    128. if ($j=2) { $j="02"; }
    129. if ($j=3) { $j="03"; }
    130. if ($j=4) { $j="04"; }
    131. if ($j=5) { $j="05"; }
    132. if ($j=6) { $j="06"; }
    133. if ($j=7) { $j="07"; }
    134. if ($j=8) { $j="08"; }
    135. if ($j=9) { $j="09"; }
    136.  
    137. if ($k=0) { $k="00"; }
    138.  
    139. echo("$i$j$k<br>"); // дата: месяц-число-год (год двузначный с 00 по 12)
    140.  
    141. $i=$i0;
    142. $j=$j0;
    143. $k=$k0;
    144.  
    145. }}}
    146.  
    147. for ($i=1;$i<=31;$i++) {
    148. for ($j=1;$j<=12;$j++) {
    149. for ($k=1970;$k<=2012;$k++) {
    150.  
    151. $i0=$i;
    152. $j0=$j;
    153.  
    154. if ($i=1) { $i="01"; }
    155. if ($i=2) { $i="02"; }
    156. if ($i=3) { $i="03"; }
    157. if ($i=4) { $i="04"; }
    158. if ($i=5) { $i="05"; }
    159. if ($i=6) { $i="06"; }
    160. if ($i=7) { $i="07"; }
    161. if ($i=8) { $i="08"; }
    162. if ($i=9) { $i="09"; }
    163.  
    164. if ($j=1) { $j="01"; }
    165. if ($j=2) { $j="02"; }
    166. if ($j=3) { $j="03"; }
    167. if ($j=4) { $j="04"; }
    168. if ($j=5) { $j="05"; }
    169. if ($j=6) { $j="06"; }
    170. if ($j=7) { $j="07"; }
    171. if ($j=8) { $j="08"; }
    172. if ($j=9) { $j="09"; }
    173.  
    174. echo("$i$j$k<br>"); // дата: число-месяц-год (год четырехзначный с 1970 по 2012)
    175.  
    176. $i=$i0;
    177. $j=$j0;
    178.  
    179. }}}
    180.  
    181. for ($i=1;$i<=12;$i++) {
    182. for ($j=13;$j<=31;$j++) {
    183. for ($k=1970;$k<=2012;$k++) {
    184.  
    185. $i0=$i;
    186. $j0=$j;
    187.  
    188. if ($i=1) { $i="01"; }
    189. if ($i=2) { $i="02"; }
    190. if ($i=3) { $i="03"; }
    191. if ($i=4) { $i="04"; }
    192. if ($i=5) { $i="05"; }
    193. if ($i=6) { $i="06"; }
    194. if ($i=7) { $i="07"; }
    195. if ($i=8) { $i="08"; }
    196. if ($i=9) { $i="09"; }
    197.  
    198. if ($j=1) { $j="01"; }
    199. if ($j=2) { $j="02"; }
    200. if ($j=3) { $j="03"; }
    201. if ($j=4) { $j="04"; }
    202. if ($j=5) { $j="05"; }
    203. if ($j=6) { $j="06"; }
    204. if ($j=7) { $j="07"; }
    205. if ($j=8) { $j="08"; }
    206. if ($j=9) { $j="09"; }
    207.  
    208. echo("$i$j$k<br>"); // дата: месяц-число-год (год четырехзначный с 1970 по 2012)
    209.  
    210. $i=$i0;
    211. $j=$j0;
    212.  
    213. }}}
    214.  
    215. ?>
    Заранее спасибо.
     
  2. karlozzz

    karlozzz Активный пользователь

    С нами с:
    24 окт 2010
    Сообщения:
    430
    Симпатии:
    0
    Адрес:
    Y-OLA
    о боже, ==, а не = в условии, на остальное даже смотреть не буду)
     
  3. Vantedur

    Vantedur Активный пользователь

    С нами с:
    9 июл 2010
    Сообщения:
    779
    Симпатии:
    2
  4. Vantedur

    Vantedur Активный пользователь

    С нами с:
    9 июл 2010
    Сообщения:
    779
    Симпатии:
    2
  5. zhen

    zhen Активный пользователь

    С нами с:
    12 фев 2007
    Сообщения:
    37
    Симпатии:
    0
    блин с условием косяк вышел, и как не заметил, спс.
     
  6. zhen

    zhen Активный пользователь

    С нами с:
    12 фев 2007
    Сообщения:
    37
    Симпатии:
    0
    Да еще раз огромное спасибо, исправил = на == и все заработало )
     
  7. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    zhen
    ЭТО капец
     
  8. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    zhen
    Советую подумать и выложить более рациональный вариант. Иначе Вам придется менять ник, чтобы не нашли этот позор Ваши знакомые и коллеги.

    P.S. Остальным пока не рекомендуйте НИЧЕГО.
     
  9. Devzirom

    Devzirom Активный пользователь

    С нами с:
    15 фев 2009
    Сообщения:
    463
    Симпатии:
    0
    Адрес:
    Пермь
    zhen, большое спасибо за код! Я давненько на говнокод не выкладывал!
    http://govnokod.ru/5647
     
  10. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Kreker
    Советую подумать и выложить более рациональный вариант.
    Я бы посоветовал начать с постановки задачи, ибо я не только не понял почему он такой дикий, но вобще что он делает :D
     
  11. Padaboo

    Padaboo Старожил
    Команда форума Модератор

    С нами с:
    26 окт 2009
    Сообщения:
    5.242
    Симпатии:
    1
    zhen
    В качестве аватарки разрешены только личные фото.
     
  12. zhen

    zhen Активный пользователь

    С нами с:
    12 фев 2007
    Сообщения:
    37
    Симпатии:
    0
    Код самый простой, написан копипастом за 2 мин, впринципе он работает после небольших исправлений а мне это и надо было. я конечно понимаю что он очень не оптимальный, но задачей было просто получить список дат один раз и все, так сказать чтоб вручную их не писать. И пхп я знаю на очень поверхностном уровне, никому ничего не советую, сайтов не делаю, использую только в личных целях )
    аватарку поменяю чуть пожже.
     
  13. zhen

    zhen Активный пользователь

    С нами с:
    12 фев 2007
    Сообщения:
    37
    Симпатии:
    0
    Рабочая версия кода, рад выслушать критику про оптимизацию )
    PHP:
    1.  
    2. <?php
    3.  
    4. for ($i=1;$i<=31;$i++) { // дни
    5. for ($j=1;$j<=12;$j++) { // месяцы
    6. for ($k=70;$k<=99;$k++) { // годы
    7.  
    8. $i0=$i; // сохраняем оригинальные значения
    9. $j0=$j; // переменных i и j
    10.  
    11. if ($i==1) { $i="01"; } // конвертируем их значения
    12. if ($i==2) { $i="02"; } // в двухзначную форму
    13. if ($i==3) { $i="03"; }
    14. if ($i==4) { $i="04"; }
    15. if ($i==5) { $i="05"; }
    16. if ($i==6) { $i="06"; }
    17. if ($i==7) { $i="07"; }
    18. if ($i==8) { $i="08"; }
    19. if ($i==9) { $i="09"; }
    20.  
    21. if ($j==1) { $j="01"; }
    22. if ($j==2) { $j="02"; }
    23. if ($j==3) { $j="03"; }
    24. if ($j==4) { $j="04"; }
    25. if ($j==5) { $j="05"; }
    26. if ($j==6) { $j="06"; }
    27. if ($j==7) { $j="07"; }
    28. if ($j==8) { $j="08"; }
    29. if ($j==9) { $j="09"; }
    30.  
    31. echo("$i$j$k<br>"); // выводим дату: число-месяц-год (год двузначный с 70 по 99)
    32.  
    33. $i=$i0; // востанавливаем оригинальные
    34. $j=$j0; // значения переменных i и j
    35.  
    36. }}}
    37.  
    38. for ($i=1;$i<=12;$i++) {
    39. for ($j=13;$j<=31;$j++) { // начинаем с 13 чтобы не повторяться в датах
    40. for ($k=70;$k<=99;$k++) {
    41.  
    42. $i0=$i;
    43.  
    44. if ($i==1) { $i="01"; }
    45. if ($i==2) { $i="02"; }
    46. if ($i==3) { $i="03"; }
    47. if ($i==4) { $i="04"; }
    48. if ($i==5) { $i="05"; }
    49. if ($i==6) { $i="06"; }
    50. if ($i==7) { $i="07"; }
    51. if ($i==8) { $i="08"; }
    52. if ($i==9) { $i="09"; }
    53.  
    54. echo("$i$j$k<br>"); //  дата: месяц-число-год (год двузначный с 70 по 99)
    55.  
    56. $i=$i0;
    57.  
    58. }}}
    59.  
    60. for ($i=1;$i<=31;$i++) {
    61. for ($j=1;$j<=12;$j++) {
    62. for ($k=0;$k<=12;$k++) {
    63.  
    64. $i0=$i;
    65. $j0=$j;
    66. $k0=$k;
    67.  
    68. if ($i==1) { $i="01"; }
    69. if ($i==2) { $i="02"; }
    70. if ($i==3) { $i="03"; }
    71. if ($i==4) { $i="04"; }
    72. if ($i==5) { $i="05"; }
    73. if ($i==6) { $i="06"; }
    74. if ($i==7) { $i="07"; }
    75. if ($i==8) { $i="08"; }
    76. if ($i==9) { $i="09"; }
    77.  
    78. if ($j==1) { $j="01"; }
    79. if ($j==2) { $j="02"; }
    80. if ($j==3) { $j="03"; }
    81. if ($j==4) { $j="04"; }
    82. if ($j==5) { $j="05"; }
    83. if ($j==6) { $j="06"; }
    84. if ($j==7) { $j="07"; }
    85. if ($j==8) { $j="08"; }
    86. if ($j==9) { $j="09"; }
    87.  
    88. if ($k==0) { $k="00"; }
    89. if ($k==1) { $k="01"; }
    90. if ($k==2) { $k="02"; }
    91. if ($k==3) { $k="03"; }
    92. if ($k==4) { $k="04"; }
    93. if ($k==5) { $k="05"; }
    94. if ($k==6) { $k="06"; }
    95. if ($k==7) { $k="07"; }
    96. if ($k==8) { $k="08"; }
    97. if ($k==9) { $k="09"; }
    98.  
    99. echo("$i$j$k<br>"); // дата: число-месяц-год (год двузначный с 00 по 12)
    100.  
    101. $i=$i0;
    102. $j=$j0;
    103. $k=$k0;
    104.  
    105. }}}
    106.  
    107. for ($i=1;$i<=12;$i++) {
    108. for ($j=13;$j<=31;$j++) {
    109. for ($k=0;$k<=12;$k++) {
    110.  
    111. $i0=$i;
    112. $k0=$k;
    113.  
    114. if ($i==1) { $i="01"; }
    115. if ($i==2) { $i="02"; }
    116. if ($i==3) { $i="03"; }
    117. if ($i==4) { $i="04"; }
    118. if ($i==5) { $i="05"; }
    119. if ($i==6) { $i="06"; }
    120. if ($i==7) { $i="07"; }
    121. if ($i==8) { $i="08"; }
    122. if ($i==9) { $i="09"; }
    123.  
    124. if ($k==0) { $k="00"; }
    125. if ($k==1) { $k="01"; }
    126. if ($k==2) { $k="02"; }
    127. if ($k==3) { $k="03"; }
    128. if ($k==4) { $k="04"; }
    129. if ($k==5) { $k="05"; }
    130. if ($k==6) { $k="06"; }
    131. if ($k==7) { $k="07"; }
    132. if ($k==8) { $k="08"; }
    133. if ($k==9) { $k="09"; }
    134.  
    135. echo("$i$j$k<br>"); // дата: месяц-число-год (год двузначный с 00 по 12)
    136.  
    137. $i=$i0;
    138. $k=$k0;
    139.  
    140. }}}
    141.  
    142. for ($i=1;$i<=31;$i++) {
    143. for ($j=1;$j<=12;$j++) {
    144. for ($k=1970;$k<=2012;$k++) {
    145.  
    146. $i0=$i;
    147. $j0=$j;
    148.  
    149. if ($i==1) { $i="01"; }
    150. if ($i==2) { $i="02"; }
    151. if ($i==3) { $i="03"; }
    152. if ($i==4) { $i="04"; }
    153. if ($i==5) { $i="05"; }
    154. if ($i==6) { $i="06"; }
    155. if ($i==7) { $i="07"; }
    156. if ($i==8) { $i="08"; }
    157. if ($i==9) { $i="09"; }
    158.  
    159. if ($j==1) { $j="01"; }
    160. if ($j==2) { $j="02"; }
    161. if ($j==3) { $j="03"; }
    162. if ($j==4) { $j="04"; }
    163. if ($j==5) { $j="05"; }
    164. if ($j==6) { $j="06"; }
    165. if ($j==7) { $j="07"; }
    166. if ($j==8) { $j="08"; }
    167. if ($j==9) { $j="09"; }
    168.  
    169. echo("$i$j$k<br>"); // дата: число-месяц-год (год четырехзначный с 1970 по 2012)
    170.  
    171. $i=$i0;
    172. $j=$j0;
    173.  
    174. }}}
    175.  
    176. for ($i=1;$i<=12;$i++) {
    177. for ($j=13;$j<=31;$j++) {
    178. for ($k=1970;$k<=2012;$k++) {
    179.  
    180. $i0=$i;
    181.  
    182. if ($i==1) { $i="01"; }
    183. if ($i==2) { $i="02"; }
    184. if ($i==3) { $i="03"; }
    185. if ($i==4) { $i="04"; }
    186. if ($i==5) { $i="05"; }
    187. if ($i==6) { $i="06"; }
    188. if ($i==7) { $i="07"; }
    189. if ($i==8) { $i="08"; }
    190. if ($i==9) { $i="09"; }
    191.  
    192. echo("$i$j$k<br>"); // дата: месяц-число-год (год четырехзначный с 1970 по 2012)
    193.  
    194. $i=$i0;
    195.  
    196. }}}
    197.  
    198. ?>
    199.  
     
  14. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    Не шути так... Если услышишь реальную критику, твоё ЧСВ упадёт так сильно что ты повесишься...


    Да, и...
    http://www.php.net/manual/en/function.sprintf.php
     
  15. zhen

    zhen Активный пользователь

    С нами с:
    12 фев 2007
    Сообщения:
    37
    Симпатии:
    0
    не ну я сам понимаю что проверку if ($i==1) { $i="01"; } нужно вынести за циклы
    for ($j=хх;$j<=хх;$j++) и for ($k=хх;$k<=хх;$k++) ну а больше я косяков не вижу.
    разве что вместо кучи if использовать elseif. Про функции я ничего не знаю поэтому
    приходится писать код повторно, но это влияет только на размер файла а не на
    быстродействие, т.к. какая разница процессору откуда брать код ))
    Код (Text):
    1. p.s. нигде не нашел в правилах форума что аватаркой может  быть только личная фото.
     
  16. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    Однако это факт (может в правила и забыли вписать, но все договорились что будет именно так)

    Убрать её нужно (для начала) всё это делается проще и быстрее (а если отойти от РНР и мыслить более "масштабно" то можно нейтрализовать и остальное)
     
  17. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    http://www.php.ru/forum/viewtopic.php?t=449
     
  18. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    [vs]
    Это не правила, это обсуждение
     
  19. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    И этот человек еще говорит о быстродействии facepalm
     
  20. Padaboo

    Padaboo Старожил
    Команда форума Модератор

    С нами с:
    26 окт 2009
    Сообщения:
    5.242
    Симпатии:
    1
  21. zhen

    zhen Активный пользователь

    С нами с:
    12 фев 2007
    Сообщения:
    37
    Симпатии:
    0
    мне не нужно форматировать дату, мне нужно было вывести все даты определенного периода времени в определенной форме. Считаю что мой способ в плане алгоритма самый простой.
     
  22. zhen

    zhen Активный пользователь

    С нами с:
    12 фев 2007
    Сообщения:
    37
    Симпатии:
    0
    незнание синтаксиса одного из множества языков программирования не говорит не о чем,
    кроме того , что я не знаю php.
     
  23. zhen

    zhen Активный пользователь

    С нами с:
    12 фев 2007
    Сообщения:
    37
    Симпатии:
    0
    посмотрел тему с говнокодом, долго смеялся над собой ))
     
  24. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    можно его немного усложнить
    PHP:
    1. <?
    2. $start = mktime(0,0,0,1,1,2011);
    3. $end = mktime (0,0,0,31,12,2011);
    4. for ($i=$start; $i<= $end; $i += (60*60*24)) {
    5.      echo date('d-m-y', $i);
    6.      echo '<br>';
    7. }
     
  25. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    Дело не в синтаксисе, а в логике.

    Что, так нельзя было?
    if (!isset($j[1]))
    $j = '0'.$j;

    Или так:
    if (str_length($j))
    $j = '0'.$j;

    Вместо кучи условий.

    Или со знанием php:
    $j = sprintf('%02d', $j);


    Или вариант, который предложил [vs]
     
Статус темы:
Закрыта.