Autor Zpráva
Lion76
Profil *
Zdravim, pokousim se vytvorit tabulku cyklem for, ale nezobrazuje spravny pocet bunek.

$pocetBunek = "3";
$celkemZaznamu = "5";
$pocetRadku = ceil($pocetBunek / $celkemZaznamu);

echo "<table>";
for ($radek=0;$radek<=$pocetRadku;$radek++){
echo "<tr>";
for ($bunky=0;$bunky<=$pocetBunek;$bunky++)
echo "<td>&raquo;</td>";
echo "</tr>";
}
echo "</table>";

Vypise:

» » » »
» » » »

Ale spravne je:

» » »
» »

Kde mam prosim chybu?
tiso
Profil
...tak prečo v cykloch začínaš s 0-ou?
A čo sa týka posledného riadku, tak niekedy je vhodné vypísať rovnaký počet buniek...
Lion76
Profil *
tiso

No tak jsem cyklus zacal jednickou a nic se nezmenilo. Ale ja potrebuji docilit toho, aby byly dva radky a pet bunek.
Lion76
Profil *
A nebo dva radky a pet bunek, kde bude », v seste bunce na druhem radku by bylo prazdne misto.
pista87
Profil
<?php
$pocetBunek = 3;
$celkemZaznamu = 5;
$pocetRadku = ceil($celkemZaznamu / $pocetBunek);
$posledneBunky = $celkemZaznamu % $pocetBunek;

echo "<table>";
for ($radek=1;$radek<=$pocetRadku;$radek++){
echo "<tr>";
if($radek == $pocetRadku)
for ($bunky=0;$bunky<$posledneBunky;$bunky++)
echo "<td>&raquo;</td>";
else
for ($bunky=0;$bunky<$pocetBunek;$bunky++)
echo "<td>&raquo;</td>";
echo "</tr>";
}
echo "</table>";
?>
Lion76
Profil *
pista87


Diky, vsechno je me jasne az na tento zapis $posledneBunky = $celkemZaznamu % $pocetBunek; . Proc je tam % ?
pista87
Profil
Lion76

Posledny riadok - to je delenie "modulo" (zvysok po deleni)
(treba zistit kolko ma posledny riadok zaznamov)

napr:
5%3=2
8%10=8
15%1=0
Lion76
Profil *
pista87

Aha, dekuji za vysvetleni. Ted jsem si zkousel do toho kodu dat cyklus while, ale asi to nepujde, protoze to vypisuje stejne hodnoty na radku nebo delat neco spatne. Pujde do toho kodu dat i cyklus while.
pista87
Profil
Lion76

Da sa to len zbytocne by tam pribudlo cca 6 riadkov
Lion76
Profil *
pista87

Ale ja bych to potreboval, protoze jsou to hodnoty z db dotazu a ja nemuzu na to porad prijit, jak ten cyklus tam mam dat. Pomuzes se mne prosim?
pista87
Profil
Lion76

<?php
$pocetBunek = 3;
$celkemZaznamu = 5;
$pocetRadku = ceil($celkemZaznamu / $pocetBunek);
$posledneBunky = $celkemZaznamu % $pocetBunek;

echo "<table>";
$radek=1;
while($radek<=$pocetRadku){
echo "<tr>";
$bunky=0;
if($radek == $pocetRadku){
while($bunky<$posledneBunky){
echo "<td>&raquo;</td>";
$bunky++;
}
}
else{
while($bunky<$pocetBunek){
echo "<td>&raquo;</td>";
$bunky++;
}
}
echo "</tr>";
$radek++;
}
echo "</table>";
?>
Lion76
Profil *
pista87

Jsi moc hodny dekuji.
tiso
Profil
Lion76 - Ak chceš do tej tabuľky uložiť záznamy z db, tak treba tú tabuľku konštruovať takto:

$pocetBunek=3;
echo '<table>';//zaciatok tabulky
$counter=1;
while($line=mysql_assoc($result)){
$column=$counter % $pocetBunek;
if($column === 1){echo '<tr>';}//zaciatok riadku
echo '<td>'.$line["id"].'</td>';//bunka s nejakymi datami z DB
if($column === 0){echo '</tr>';}//koniec riadku
$counter++;
}
if($column !== 0){echo str_repeat('<td>&nbsp;</td>', $column).'</tr>';}//ukoncenie radka prazdnymi bunkami
echo '</table>';//koniec tabulky


Nabudúce skús k tomu ako upraviť nejaký skript napísať aj priamo o čo Ti ide, bolo by to rýchlejšie
Andy
Profil *
Zaujimave, len nechnapem tomuto:
preco je tam 3x rovnasa? : ($column === 1)
a co znamena toto: $column=$counter % $pocetBunek;

Teda chapem co to robi, ale neviem ako.. Mali popis by sa hodil.
Lion76
Profil *
tiso

Dekuji, slibuji, ze se polepsim.
tiso
Profil
Andy === je operátor identity, ktorý je pravdivý ak sú oba operandy rovnaké i rovnakého typu...
V PHP totiž funguje automatické pretypovanie operandov, takže ak napríklad porovnávaš reťazec (typ string) s celým číslom (typ int), tak sa najprv automaticky pretypuje jeden z operandov (podľa pravidiel priority sa určuje ktorý) na typ toho druhého a porovnávajú sa už operandy rovnakého typu...

Takže potom platí napríklad že (1 == true) ale (1 === true) už nie, pretože sú operandy rozdielneho typu...
Prečo sa operátor identity používa - pretože niektoré funkcie môžu vracať návratové hodnoty rôzneho typu - napríklad: (false, 0, 1, 10). No a pri klasickom porovnávaní nezistíš či Ti funkcia vrátila 0 alebo false, preto ak chceš zistiť či Ti vrátila false tak porovnávaš ($hodnota === false) alebo ak chceš zistiť či vrátila 0 tak porovnávaš ($hodnota === 0).

V tom skripte som zvolil operátor identity, hoci by myslím stačilo obyčajné porovnanie.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: