ďťż

[PHP] Co tutaj nie działa? Źle ułożona funkcja?

       

Podstrony


telcocafe

Mam tu taki skrypt pobierający z tablicy:

<?php $dmp[0]="5:46"; $dmp[1]="7:40"; $dmp[2]="9:49"; $dmp[3]="11:59"; $dmp[4]="14:40"; $dmp[5]="17:05"; $dmp[6]="20:00"; $dmp[7]="22:06"; ?>

Są to oczywiście godziny z minutami. Są one zmieniane za pomocą funkcji dodawanko() o daną ilość minut, w zależności od potrzeby. Wyniki są zabezpieczone przed zapisem typu 10:6 (bo powinno być 10:06), dla wartości minut mniejszych niż 10. Wszystko gra jeśli $odleglosc o którą chcemy zmienić elementy z tablicy o liczbę dodatnią lub zero, oraz jeśli $odleglosc jest ujemna, ale większa od wartosci minut.
Jeśli np. mamy wartość 17:05 i damy $odleglosc= -10; to otrzymamy 17:0-5. Próbowałem to zabezpieczyć funkcją ujemne(), ale albo nie tak ją napisałem, albo źle wywołałem :/
Oto kod:
<?php function ujemne($parm1, $parm2, $parm3) { if ($parm1 < 0) { $parm2 = ($parm2 + 60); $parm3 = ($parm3 - 1); } } function minuty($parm4, $parm5) { if($parm4 >= 60){ $parm4 = ($parm4 + 1); $parm5 = ($parm5 - 60); } } $idkursu=$dmp; function dodawanko($idkursu, $odleglosc) { foreach($idkursu as $key =>$value) { $explode = explode(":","$value"); ujemne($odleglosc, $explode[1], $explode[0]); $explode[1] = ($explode[1]+$odleglosc); minuty($explode[1], $explode[0]); if($explode[1] < 10) { $explode[1] = "0".$explode[1]; } $after=implode (':', $explode); $idkursu[$key]=$after; } return $idkursu; } ?>



Oj, pokręciłeś... Radą nauczycielki jeszcze z podstawówki przeczytałem to parę razy... Co chcesz osiągnąć?

Chcę żeby można było do wartości z tablic dodawać zmienną $odleglosc, i otrzymywać poprawne wyniki:
20:00 dla zmiennej $odleglosc=-10 powinno dać 19:50 a zamiast tego dostaję 20:0-10

To się pobaw funkcjami mktime() oraz date() ;)



Przyglądałem się tym funkcjom i nie wiem jak je ugryźć :/ Jestem bardzo początkujący i napisałem ten skrypt tak jak potrafię... Czy na pewno nie da rady tak poprawić funkcję ujemne() żeby zwracała poprawny wynik? A może wystarczy ją przenieść, ewentualnie coś dopisać? Sam juz nie wiem :( Próbowałem wielu kombinacji i nic...

A gdzie ujemne() coś zwraca, bo nie widzę... Nie chce mi się rozgryzać Twoich funkcji, ale w tym ujemne() napisz & przed nazwą każdego z rezultatów - to po pierwsze.
Po drugie, dużo łatwiej jest się pobawić ww. przeze mnie funkcjami wbudowanymi. W podręczniku dużo na ten temat jest napisane.


A gdzie ujemne() coś zwraca, bo nie widzę... Nie chce mi się rozgryzać Twoich funkcji, ale w tym ujemne() napisz & przed nazwą każdego z rezultatów - to po pierwsze.
Po drugie, dużo łatwiej jest się pobawić ww. przeze mnie funkcjami wbudowanymi. W podręczniku dużo na ten temat jest napisane.


dane z tablicy powiększone o $odleglosc pobieram tak: echo $dmp[0]; itd. aż do $dmp[7];

Cały kod - explody i inne takie - jest bez sensu. Czy nie łatwiej i wygodniej stosować strtotime? Funkcja ta zamienia angielski zapis słów (np "now" jako teraz, "now +10 minutes" jako za dziesięć minut) na uniksowy znacznik czasu który następnie możemy wyświetlić za pomocą funkcji date(). Jest to gotowa funkcja do tego typu działań. Sam zobacz: http://pl2.php.net/strtotime

Prosty przykład:
<? echo 'Teraz jest: '.date('H:i', time()).'<br />'; echo 'Za 10 minut bedzie: '.date('H:i', strtotime("now +10 minutes")); ?>

Mówię Ci, da się to łatwiej zrobić! To naskrobałem:
function czas($t, $odliczenie) { $t = explode(':', $t); $c = mktime($t[0], $t[1]+$odliczenie); return date('G:i', $c); }
Wystarczy wywoływać w pętli do wszystkich pozycji w tablicy ;)
Proste, prawda? :P

//Uprzedzili mnie :)
Aha: mój kod nie zadziała pod systemem Windows :)
Użytkownik pbnan edytował ten post 28 sierpień 2006, 17:26
Poprawiłem, wyszło mi takie coś...
<?php $sgp[1]="5:45"; $sgp[2]="11:00"; $sgp[3]="13:55"; $sgp[4]="15:25"; $sgp[5]="18:55"; $sgp[6]="20:05"; $sgp[7]="21:25"; function dodaj($t, $odleglosc) { foreach($t as $key =>$value) { $t = explode(':', $t); $c = mktime($t[0], $t[1]+$odleglosc); return date('G:i', $c); $after=implode (':', $t); $t[$key]=$after; } return $t; } $sgp=dodaj($sgp, 25); echo $sgp[1]; ?>

Tylko że teraz wyświetla tylko dwukropek...

"Aha: mój kod nie zadziała pod systemem Windows" - tzn po stronie serwera czy przeglądarki? :|
Użytkownik ichu edytował ten post 28 sierpień 2006, 17:56

Poprawiłem, wyszło mi takie coś...
<?php $sgp[1]="5:45"; $sgp[2]="11:00"; $sgp[3]="13:55"; $sgp[4]="15:25"; $sgp[5]="18:55"; $sgp[6]="20:05"; $sgp[7]="21:25"; function dodaj($t, $odleglosc) { foreach($t as $key =>$value) { $t = explode(':', $t); $c = mktime($t[0], $t[1]+$odleglosc); return date('G:i', $c); $after=implode (':', $t); $t[$key]=$after; } return $t; } $sgp=dodaj($sgp, 25); echo $sgp[1]; ?>

Tylko że teraz wyświetla tylko dwukropek...

"Aha: mój kod nie zadziała pod systemem Windows" - tzn po stronie serwera czy przeglądarki? :|

Po stronie serwera, oczywiście. Windows nie obsługuje liczb całkowitych ujemnych - każdy programujący w PHP powinien o tym wiedzieć...

Poczytaj więcej o tworzeniu funkcji ;)

A gdy się tak uparłeś na tę pętlę foreach, proszę:
function dodaj(&$t, $odleglosc) { foreach($t as $key =>$value) { $a[] = explode(':', $value); $c = mktime($a[0], $a[1]+$odleglosc); $value = return date('G:i', $c); } }
Powinno działać ;)

<?php $sgp[1]="5:45"; $sgp[2]="11:00"; $sgp[3]="13:55"; $sgp[4]="15:25"; $sgp[5]="18:55"; $sgp[6]="20:05"; $sgp[7]="21:25"; function dodaj(&$t, $odleglosc) { foreach($t as $key =>$value) { $a[] = explode(':', $value); $c = mktime($a[0], $a[1]+$odleglosc); $value = return date('G:i', $c); } } $sgp=dodaj($sgp, 25); echo $sgp[2]; ?>

Powinno, ale nie działa :(

Przespałem się z tym i oto wynik :D
<? $sgp[0]="5:45"; $sgp[1]="11:00"; $sgp[2]="13:55"; $sgp[3]="15:25"; $sgp[4]="18:55"; $sgp[5]="20:05"; $sgp[6]="21:25"; #### TO, CO CHCIALES: WKURZAJACA, ALE JEDNOCZESNIE BARDZO PROSTA FUNKCJA OPERUJACA NA CZASIE LINUKSA (ALE DZIALA NA WINZGROZIE) #### function zwroc_czas($czas, $ile_dodac) { if (is_string($czas) && is_int($ile_dodac)) { //OBOWIAZKOWE SPRAWDZENIE POPRAWNOSCI WPISANYCH DANYCH, TO SAMO MOZNA UZYSKAC M. IN. RZUTOWANIEM TYPU $a = explode(':', $czas); //ROZBICIE CZASU NA GODZINY I MINUTY return date('G:i', mktime($a[0], $a[1]+$ile_dodac, 0)); //HEHE, TUTAJ OSZCZEDZAMY KILKA LINIJEK;] - ZWRACA SFORMATOWANY CZAS LINUKSA (ZWIEKSZONY JUZ O $ile_dodac) } else return false; } #### FUNKCJA DZIALAJACA NA TABLICY, A NIE NA POJEDYNCZYCH WARTOSCIACH; WYWOLUJE W PETLI POWYZSZA #### function dodaj_czas($ar, $odcinek) { $array = $ar; //PRZYPISANIE DO TABLICY LOKALNEJ, BO NA $ar NIE MOZNA OPEROWAC foreach ($array as $key=>$value) { $array[$key] = zwroc_czas($value, $odcinek); //WYWOLYWANIE W PETLI GLOWNEJ FUNKCJI } return $array; //ZWRACANIE JAKO WYNIK TABLICY - KONCZY TO ROBIENIE CALEJ FUNKCJI } #### SPRAWDZANIE SKRYPTU #### $sgp = dodaj_czas($sgp, 15); //WYSWIETLA ZAWARTOSC TABLICY foreach ($sgp as $key=>$value) echo $key.' ma wartość '.$value.'<br>'."\r\n"; ?>

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • nvm.keep.pl

  • Sitedesign by AltusUmbrae.