Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Problem z tablicami - PHP., Odmiana przez przypadki.
bercik809
post
Post #1





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 19.06.2013
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Witam wszystkich,

Jestem nowym użytkownikiem, cieszę się, że znalazłem to forum i chciałem wszystkich przywitać (IMG:style_emoticons/default/smile.gif)

Mój pierwszy post będzie dotyczył problemu z tablicami, a mianowicie proszę spojrzeć na kod:

  1. function secondToString( $Seconds ) {
  2.  
  3. $zmienne_jednostki = array("rok", "lata", "miesiace", "miesiecy", "dzien", "godzina", "godziny", "minuta", "minuty", "sekundy", "sekunda");
  4. $jednostki = array(
  5. 60*60*24*365 => ' lat',
  6. 60*60*24*30 => ' miesiac', // miesiace
  7. 60*60*24 => ' dni', // dni
  8. 60*60 => ' godzin', // godziny
  9. 60 => ' minut', // minuty
  10. 1 => ' sekund', // sekundy
  11. );
  12.  
  13.  
  14. $zawartosc = '';
  15. foreach( $jednostki As $czas_minuty => $czas_sekundy ) {
  16. $iDiv = $Seconds/$czas_minuty;
  17. if( $iDiv >= 1 ) {
  18. $x = floor( $iDiv );
  19. $zawartosc .= $x.''.$czas_sekundy.' ';
  20. $Seconds-= $x*$czas_minuty;
  21. }
  22.  
  23.  
  24. if(date("m") == 01 || 03 || 05 || 07 || 08 || 10 || 12 ){
  25.  
  26. $zamien = array(60*60*24*31 => 'miesiac');
  27. array_replace($jednostki, $zamien);
  28. }
  29.  
  30. else {
  31.  
  32. $zamien = array(60*60*24*30 => 'miesiac');
  33. array_replace($jednostki, $zamien);
  34. }
  35.  
  36. if(date("L")){
  37.  
  38. $zamien = array(60*60*24*28 => 'miesiac');
  39. array_replace($jednostki, $zamien);
  40. }
  41.  
  42. }
  43.  
  44. return $zawartosc;
  45. }
  46.  
  47.  
  48. echo secondToString($name = $_REQUEST['name']);


Chodzi o to by, nie zwracało mi wyniku tylko i wyłącznie typu: 1 lata 2 dnia 5 miesiac - tylko 1 rok 2 dni 5 miesięcy.
Męczę się z tym nie miłosiernie i nie mogę tego rozwiązać.
Proszę o jakąkolwiek pomoc, jeżeli będzie potrzeba więcej szczegółów odnośnie problemu postaram się dopisać jak najwięcej.
Skrypt po wpisaniu w formularzu html i naciśnięciu przycisku dzięki ajaksowi bez odświeżania zamienia wpisaną ilość sekund na ilość sekund,
minut, dni, godzin, miesięcy i lat.
I wszystkie nazwy lat, miesiecy, dni itd. idą z jednej tablicy. I chodzi mi o to, co mam dopisać aby nazwy z tablicy odmieniały się przez
przypadki, tzn. nie były sztywne. Jak już pisałem, nie 2 lat, tylko 2 lata itd.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
bercik809
post
Post #2





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 19.06.2013
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Zamieszczam kod HTML:

  1. <!DOCTYPE html>
  2. <html lang = "pl">
  3. <meta charset="UTF-8">
  4. <meta name="description" content="Opis">
  5. <title>PHP - OOP</title>
  6. <script type="text/javascript" src="jquery-2.0.2.min.js"></script>
  7. <script type="text/javascript">
  8. $(document).ready(function() {
  9. $("#click").click(function(){
  10. $("#box").load('wyniki.php', {"name" : $("#name").val()} );
  11. });
  12. });
  13. $(document).keypress(function(e) {
  14. if(e.which == 13) {
  15. $("#box").load('wyniki.php', {"name" : $("#name").val()} );
  16. }
  17. });
  18. </script>
  19. </head>
  20.  
  21. Wpisz liczbę sekund: <input type="text" name="name" id='name' size="15">
  22. <input type="button" value="Pokaż" id="click" name="button">
  23.  
  24. <div id="box">
  25.  
  26. </div>
  27. </body>
  28. </html>


Kod PHP:

  1. <?php
  2.  
  3. function secondToString( $Seconds ) {
  4.  
  5. // Tablica $jednosci.
  6. $jednosci = array(
  7. 60*60*24*365 => ' rok', // lata
  8. 60*60*24*31 => ' miesiac', // miesiace
  9. 60*60*24 => ' dzien', // dni
  10. 60*60 => ' godzina', // godziny
  11. 60 => ' minuta', // minuty
  12. 1 => ' sekunda', // sekundy
  13. );
  14.  
  15. $zawartosc = '';
  16. foreach( $jednosci As $czas_minuty => $czas_sekundy) {
  17. $iDiv = $Seconds/$czas_minuty;
  18.  
  19. // Deklarujemy funkcje wyboru switch, aby pomogla nam odmienić tablice $jednosci przez przypadki.
  20. switch($czas_sekundy){
  21.  
  22. case ' sekunda':
  23.  
  24. if($iDiv >= 2 && $iDiv <= 4){
  25.  
  26. $czas_slownie = " sekundy";
  27. $x = floor( $iDiv );
  28. $zawartosc .= $x.''.$czas_slownie.' ';
  29. $Seconds -= $x*$czas_minuty;
  30. break;
  31.  
  32. } // zakonczenie instrukcji if - case sekunda.
  33.  
  34. if($iDiv >= 5){
  35.  
  36. $czas_slownie = " sekund";
  37. $x = floor( $iDiv );
  38. $zawartosc .= $x.''.$czas_slownie.' ';
  39. $Seconds-= $x*$czas_minuty;
  40. break;
  41.  
  42. } // zakonczenie instrukcji if - case sekunda.
  43.  
  44. case ' minuta':
  45.  
  46.  
  47. if($iDiv >= 2 && $iDiv <= 4){
  48.  
  49. $czas_slownie = " minuty";
  50. $x = floor( $iDiv );
  51. $zawartosc .= $x.''.$czas_slownie.' ';
  52. $Seconds-= $x*$czas_minuty;
  53. break;
  54. } // zakonczenie instrukcji if - case minuta.
  55.  
  56. if($iDiv >= 5){
  57.  
  58. $czas_slownie = " minut";
  59. $x = floor( $iDiv );
  60. $zawartosc .= $x.''.$czas_slownie.' ';
  61. $Seconds-= $x*$czas_minuty;
  62. break;
  63. } // zakonczenie instrukcji if - case minuta.
  64.  
  65.  
  66. case ' godzina':
  67.  
  68. if($iDiv >= 2 && $iDiv <= 4){
  69.  
  70. $czas_slownie = " godziny";
  71. $x = floor( $iDiv );
  72. $zawartosc .= $x.''.$czas_slownie.' ';
  73. $Seconds-= $x*$czas_minuty;
  74. break;
  75. } // zakonczenie instrukcji if - case godzina.
  76.  
  77. if($iDiv >= 5){
  78.  
  79. $czas_slownie = " godzin";
  80. $x = floor( $iDiv );
  81. $zawartosc .= $x.''.$czas_slownie.' ';
  82. $Seconds-= $x*$czas_minuty;
  83. break;
  84. } // zakonczenie instrukcji if - case godzina.
  85.  
  86. case ' dzien':
  87.  
  88. if($iDiv >= 2 && $iDiv <= 4){
  89.  
  90. $czas_slownie = " dni";
  91. $x = floor( $iDiv );
  92. $zawartosc .= $x.''.$czas_slownie.' ';
  93. $Seconds-= $x*$czas_minuty;
  94. break;
  95. } // zakonczenie instrukcji if - case dzien.
  96.  
  97. if($iDiv >= 5){
  98.  
  99. $czas_slownie = " dni";
  100. $x = floor( $iDiv );
  101. $zawartosc .= $x.''.$czas_slownie.' ';
  102. $Seconds-= $x*$czas_minuty;
  103. break;
  104. } // zakonczenie instrukcji if - case dzien.
  105.  
  106. case ' miesiac':
  107.  
  108. if($iDiv >= 2 && $iDiv <= 5){
  109.  
  110. $czas_slownie = " miesiace";
  111. $x = floor( $iDiv );
  112. $zawartosc .= $x.''.$czas_slownie.' ';
  113. $Seconds-= $x*$czas_minuty;
  114. break;
  115. } // zakonczenie instrukcji if - case miesiac.
  116.  
  117. if($iDiv >= 5){
  118.  
  119. $czas_slownie = " miesiecy";
  120. $x = floor( $iDiv );
  121. $zawartosc .= $x.''.$czas_slownie.' ';
  122. $Seconds-= $x*$czas_minuty;
  123. break;
  124. } // zakonczenie instrukcji if - case miesiac.
  125.  
  126. case ' rok':
  127.  
  128. if($iDiv >= 2 && $iDiv <= 4){
  129.  
  130. $czas_slownie = " lata";
  131. $x = floor( $iDiv );
  132. $zawartosc .= $x.''.$czas_slownie.' ';
  133. $Seconds-= $x*$czas_minuty;
  134. break;
  135. } // zakonczenie instrukcji if - case rok.
  136.  
  137.  
  138. if($iDiv >= 5){
  139.  
  140. $czas_slownie = " lat";
  141. $x = floor( $iDiv );
  142. $zawartosc .= $x.''.$czas_slownie.' ';
  143. $Seconds-= $x*$czas_minuty;
  144. break;
  145. } // zakonczenie instrukcji if - case rok.
  146.  
  147.  
  148. default:
  149.  
  150. if( $iDiv >= 1 ) {
  151. $x = floor( $iDiv );
  152. $zawartosc .= $x.''.$czas_sekundy.' ';
  153. $Seconds-= $x*$czas_minuty;
  154. } // zakonczenie instrukcji if - case default.
  155.  
  156. } // zakonczenie wykonania switch ($czas_sekundy).
  157.  
  158. // Sprawdzamy miesiące, które mają 31 dni oraz gdy warunek okaże sie prawdą zamieniamy rekord w tablicy.
  159. if(date("m") === "01" || date("m") === "03" || date("m") === "05" || date("m") === "07" || date("m") === "08" || date("m") === "10" || date("m") === "12" ){
  160.  
  161. $zamien = array(60*60*24*31 => ' miesiac');
  162. array_replace($jednosci, $zamien);
  163. }
  164.  
  165. else {
  166.  
  167. $zamien = array(60*60*24*30 => ' miesiac');
  168. array_replace($jednosci, $zamien);
  169. }
  170. // Sprawdzamy rok przestepny.
  171. if(date("L")){
  172.  
  173. $zamien = array(60*60*24*366 => ' rok');
  174. array_replace($jednosci, $zamien);
  175. }
  176.  
  177. } // zakończenie petli foreach.
  178.  
  179. return $zawartosc;
  180. } // zakończenie funkcji secondToString.
  181.  
  182.  
  183.  
  184. echo secondToString($name = $_REQUEST['name']); // Wyświetlamy wyniki wpisane w pole tekstowe.
  185.  
  186. ?>



Przetestujcie proszę i dajcie znać co jest nie tak. Bo wiem, że coś mi źle liczy. Tylko nie za bardzo wiem, jak wykombinować aby liczyło dobrze.
Dzięki!
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 11.10.2025 - 02:27