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%)
-----



Część kodu, który działa tak jak potrzebuje:

  1. <?php
  2.  
  3. function secondToString( $Seconds ) {
  4.  
  5.  
  6. $jednosci = array(
  7. 60*60*24*365 => ' rok', // lata
  8. 60*60*24*30 => ' 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. switch($czas_minuty && $czas_sekundy){
  20.  
  21. case 'sekunda':
  22.  
  23. if($iDiv >= 2 && $iDiv <= 4){
  24.  
  25. $czas_slownie = " sekundy";
  26. $x = floor( $iDiv );
  27. $zawartosc .= $x.''.$czas_slownie.' ';
  28. $Seconds-= $x*$czas_minuty;
  29. break;
  30.  
  31. } // zakonczenie instrukcji if($iDiv >= 2 && $iDiv <= 4).
  32.  
  33. if($iDiv >= 5){
  34.  
  35. $czas_slownie = " sekund";
  36. $x = floor( $iDiv );
  37. $zawartosc .= $x.''.$czas_slownie.' ';
  38. $Seconds-= $x*$czas_minuty;
  39. break;
  40.  
  41. } // zakonczenie instrukcji if($iDiv >= 5).
  42.  
  43. case 'minuta':
  44.  
  45. if($iDiv >= 2 && $iDiv <= 4){
  46.  
  47. $czas_slownie = " minuty";
  48. $x = floor( $iDiv );
  49. $zawartosc .= $x.''.$czas_slownie.' ';
  50. $Seconds-= $x*$czas_minuty;
  51. break;
  52.  
  53. } // zakończenie instrukcji if - case "minuta".
  54.  
  55. default:
  56.  
  57. if($iDiv >= 1){
  58.  
  59. $x = floor( $iDiv );
  60. $zawartosc .= $x.''.$czas_sekundy.' ';
  61. $Seconds-= $x*$czas_minuty;
  62. break;
  63.  
  64. } // zakonczenie instrukcji if - default.
  65.  
  66. } // zakonczenie wykonania switch ($czas_minuty && $czas_sekundy).
  67.  
  68. } // zakończenie petli foreach.
  69.  
  70.  
  71. return $zawartosc;
  72. } // zakończenie funkcji secondToString.
  73.  
  74.  
  75.  
  76.  
  77. echo secondToString($name = $_REQUEST['name']);
  78.  
  79. ?>


Myślałem, że się udało.
Chociaż, nie do końca działa. Mieszają się minuty z dniami i miesiącami.
Hmmm...

Ten post edytował bercik809 21.06.2013, 10:10:02
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 6.10.2025 - 10:28