ugrás a tartalomhoz

PHP - Osztás 1. maradéka.

internet · 2011. Aug. 10. (Sze), 15.57
Hello. A következő gondom akadt PHP-ban.
Egy kutyaneveldét készítek. (Eddig sikerrel)
Szeretnék hozzádobni, egy kor mérőt, hogy a kutya hány éves.
Az adatbázisban 1 mezőben (INIT) tárolja, a napok számát amióta megvan a kutya. Ez automatikuson naponként nő 1-el.
Kiolvasom az adatbázisból.
Elkezdek vele dolgozni.
Eddig erre jutottam.
  1. //Változók létrehozása  
  2. $korev = ""$korevv = "";  
  3. $korhonap = ""$korhonapv = "";  
  4. $korhet = ""$korhetv = "";  
  5. $kornap = ""$kornapv = "";  
  6. //matekolunk  
  7. if($kor < 7){ $kornap = $kor$kornapv = " napos";}  
  8. if($kor >= 7){if(($kor%7)/7 == 0){$korhet = $kor/7; $korhetv = " hetes ";}else{$korhet = intval($kor/7); $korhetv = " hetes és "$kornap = substr(($kor%7)/7,2,1); $kornapv = " napos.";} }  
  9. //Megjelenítem  
  10. print "Kora: ".$korev."".$korevv."".$korhonap."".$korhonapv."".$korhet."".$korhetv."".$kornap."".$kornapv;  
A $kor változó adja meg a kutya korát amit kinyer MySql-ből.
Ha 7 nap alatt van akkor kiírja, simán h ennyi napos.
De ha 7 nap fölött van, akkor szeretném, hogy kiszámolja, hogy hány hét és úgy átalakítsa. Ha A szám maradéktalanul osztható 7-el semmi gond. De ha már nem akkor gond van.
Ebben kérném segítségeteket.
Mégegyszer az a kódrészlet:
  1. $korhet = intval($kor/7); $korhetv = " hetes és "$kornap = substr(($kor%7)/7,2,1); $kornapv = " napos.";}   
Üdvözlettel: T-bond
 
1

Átmenet

internet · 2011. Aug. 10. (Sze), 16.10
A következő átmeneti kóddal dolgozik most:
  1. if($kor >= 7){if(($kor%7)/7 == 0){$korhet = $kor/7; $korhetv = " hetes ";}else{  
  2. $kornap = $kor;  
  3. while($kornap != 0)  
  4. {  
  5. if($kornap-7 >= 0){ $korhet += 1; $kornap -= 7;}else{break;}  
  6. }  
  7. $korhetv = " hetes és "$kornapv = " napos.";}}  
Remélem valaki tud jobb megoldást javasolni.
2

Kicsit formázd meg a kódot,

bugadani · 2011. Aug. 10. (Sze), 16.21
Kicsit formázd meg a kódot, meglehetősen nehezen olvasható.
Én így csinálnám:
  1. $kor = 43; //csak a példa kedvéért  
  2. $output = array(); //ide fogjuk pakolni a megjelenítendő kor darabkáit  
  3. if($kor / 365 > 1){  
  4.     $ev = floor($kor/365);  
  5.     $output[] = $ev . ' éves';  
  6.     $kor -= $ev * 365;  
  7. }  
  8. if($kor / 7 > 1){  
  9.     $het = floor($kor/7);  
  10.     $output[] = $het . ' hetes';  
  11.     $kor -= $het * 7;  
  12. }  
  13. if($kor > 0){  
  14.     $output[] = $kor . ' napos';  
  15. }  
  16. echo 'A kutya '.implode(', '$output).'.';  
Szerkesztettem, mert bennemaradt egy vesszőhiba.
A fenti kimenete: A kutya 6 hetes, 1 napos.
3

Valami ilyesmi? <?php $kor =

Poetro · 2011. Aug. 10. (Sze), 16.22
Valami ilyesmi?
  1. <?php  
  2. $kor = 31;  
  3. $datumok = array('éves' => 365, 'hónapos' => 30, 'hétes' => 7, 'napos' => 1);  
  4. $maradek = $kor;  
  5. $kimenet = array();  
  6. foreach ($datumok as $mertek => $nap) {  
  7.   $ertek = floor($maradek / $nap);  
  8.   if ($ertek) {  
  9.     $kimenet[] = "$ertek $mertek";  
  10.   }  
  11.   $maradek -= $ertek * $nap;  
  12. }  
  13.   
  14. print implode(' és '$kimenet);  
  15. ?>  
Egyébként miért a napok számát tárolod, miért nem a dátumot? Onnan a MySQL ki tudja számolni neked a napok számát a kezdő dátumtól a maiig, és nem kell naponta frissíteni minden bejegyzést.
4

Vannak problémáim azzal, amit leírtál

H.Z. v2 · 2011. Aug. 10. (Sze), 16.24
De lehet, hogy csak egyszerűen nem értelek.

Az adatbázisban 1 mezőben (INIT) tárolja, a napok számát amióta megvan a kutya. Ez automatikuson naponként nő 1-el.

Van a kutyának egy születési dátuma. Nem lenne egyszerűbb ezt tárolni az adatbázisban és minden lekérdezéskor újra kiszámolni, hogy hány napos?
Kicsit macerás nap, mint nap frissíteni a napok számát.

Hogy mennyi idős? Kb. így számolnám ki:

$hetek=int($ossznapok/7);
$napok=$ossznapok%7;
echo $hetek!=0?"$hetek hetes és $napok napos":"$napok napos";

(az int-ben nem vagyok biztos, az a függvény kell, ami lecsapja a tizedest, nem kerekít)
5

fmod()

pkadam · 2011. Aug. 11. (Cs), 03.11
Nem bonyolítjátok túl egy kicsit? Létezik egy remek fmod() nevű függvény, ami megnézi nekünk az osztás maradékát.
  1. $age = floor((time()-strtotime('2011-07-19'))/(60*60*24));  
  2. $days = fmod($age,7);  
  3. $weeks = ($age-$days)/7;  
  4.   
  5. if ($weeks$output[] =  $weeks.' hetes';  
  6. if ($days$output[] = $days.' napos';  
  7.   
  8. echo 'A kutya ' . implode(' és ',$output) . '.';  
Vagy simán lehet a $age már eleve a kor napokban (a példában 23), de mint előttem is írták, célszerűbb a születési dátumot tárolni.

(A hónapot és az évet osztogatós módszerrel semmiképp sem számolnám, mert bármely két egymást követő hónapot nézve már borul a 30 nap.)