howto - 2007 április - 2 megfelelő bejegyzés

Mutass mindent

Jelöld be, hogy főbb mely kategóriákat akarod olvasni, vagy ha csak egyet: kattints a nevére.


mindet
jan
feb
már
ápr
máj
jún
júl
aug
sze
okt
nov
dec
2023
-
-
-
-
-
-
-
-
-
-
-
2015
-
-
-
-
-
-
-
-
-
-
2014
-
-
-
-
-
-
-
-
-
2013
-
-
-
-
-
-
-
-
-
-
-
2012
-
-
-
-
-
-
-
-
-
-
-
2011
-
-
-
-
-
-
-
-
-
2010
-
-
-
-
-
-
-
-
-
-
2008
-
-
-
-
-
-
-
-
2004
-
-
-
-
-
-
-
-
-
-
-

Adott egy csomó float left-es elemünk, pl. thumbnailek egymás után. Szeretnénk, ha a float left ellenére az ezek után következő szöveg (vagy akármi) nem folyna rá a thumbnailjeinkre.

Többféle hagyományos megoldás létezik, ezek közül néhány:

<br clear='all' /> <br style='clear: both' /> <div style='clear: both'></div>

Fontos látni, hogy mindegyiknél arra van szükség, hogy a szöveg írásakor tudatában legyen az író, hogy az előtte levő izére rá fog folyni az ő szövege, és ezért beszúrja a fenti kódok vmelyikét. Ez elég szopó, hiszen a formázást minél inkább szeretnénk a tartalomtól elszeparálni.

Van egy másik megoldás is. Ha a float leftes elemeink pl. egy 'keprendezo' classú divben vannak, akkor a következő stílus segítségével a keprendezo után automatikusan sortörés lesz:

.keprendezo:after { display: block; clear: both; content: ''; }

Ekkor a képrendezőt követő paragrafusnak nem kell tudnia róla, hogy ráfolyna a képrendezőre, a képrendező ugyanis beszúr maga után egy sortörő blokkot. Is nice. I like.

Egy másik alternatív megoldás ugyanezen problémára CSS attribútum selectorok bejegyzésben.

Adottak a hét napjai (H, K, Sze, Cs, P, Szo, V), valamint egy adattábla, benne minden rekordhoz két nap. Számítsuk ki, hogy a két nap között hány-hány nap van. (Pl. hétfőtől péntekig, majd péntektől hétfőig eltelő napok száma.)

A nem javasolt megoldás: veszünk egy külső switch case szerkezetet, amelynél az eseteket az első napok szerint alakítjuk. Hét eset. Majd ezek mindegyikében egy újabb switch case, aszerint, hogy a második nap mi. 72 = 49 eset.

switch ($elsonap) {
 case 'H': 
   switch ($masodiknap)
     case 'K':   echo '1 ill 6 nap van koztuk'; break;
     case 'Sze': echo '2 ill 5 nap van koztuk'; break;
     ...
 case 'K':
   switch ($masodiknap)
     case 'H':   echo '6 ill 1 nap van koztuk'; break;
     case 'Sze': echo '1 ill 6 nap van koztuk'; break;
     ...
 ...
}

Ez tényleg nem túl jó, egyrészt a 49 elágazás miatt, másrészt mert ha mondjuk angolul is ki akarjuk írni az eredményeket akkor már 2*49 elágazásunk lesz. Egy fokkal jobb megoldás, ha a napokhoz számokat társítunk, majd ezeket kivonogatjuk egymásból mod 7:

switch ($nap) {
 case 'H': $n = 1;
 case 'K': $n = 2;
 ...
}

Csakhogy ezt a társítást lehet switch case nélkül is, és ezúttal egy végleges, immáron meglehetősen rövid és komplett megoldás:

function eltelt_napok($napchar1, $napchar2) {
 $napok = array('H' => 1, 'K' => 2, 'Sze' => 3, ...);
 $nap1 = $napok[$napchar1];
 $nap2 = $napok[$napchar2];
 $diff1 = mod(max($nap1, $nap2) - min($nap1, $nap2), 7);
 $diff2 = mod(min($nap1, $nap2) - max($nap1, $nap2), 7);
 return array($diff1, $diff2);
}

A mod fv természetesen megvalósítandó vmi tetszőleges módon. Lehet hogy a php-ben van is rá vmi, én hirtelen nem találtam, úgyhogy:

function mod($n, $q) {
   $n %= $q;
   if ($n < 0)
      $n += $q;
   return $n;
}

Update 17:13: sőt a mod fv is elhagyható, ld. tbela kommentje.