Autor | Zpráva | ||
---|---|---|---|
Ben Profil * |
#1 · Zasláno: 4. 10. 2011, 11:40:56
Ahoj, řeším následující problém.
Mám toto: <?php ini_set('error_reporting',E_ALL); ini_set('display_errors', 1); $zaznamu_celkem = (int)9; for ($i = 1; $i <= 9; $i++){ $i=(int)$i; //prvni rada obrazku //zacatek prvni rady if($i == 1){ echo"<div id=\"rada-obrazku-1\">"; } if($i >= 1 and $i <= 3){ if($i % 1 == "0"){ echo $i." jednicka"; } if($i % 2 == "0"){ echo $i." dvojka"; } if($i % 3 == "0"){ echo $i." trojka"; } if($zaznamu_celkem > 3){$max=3;} else{$max=$zaznamu_celkem;} if($i = $max){ echo"<!-- konec 1. rady -->"; echo"</div>\n"; } } if($i == 4){ echo"<div id=\"rada-obrazku-2\">"; } if($i >= 4 and $i <= 6){ if($i % 4 == "0"){ echo $i." ctyrka"; } if($i % 5 == "0"){ echo $i." dpetka"; } if($i % 6 == "0"){ echo $i." sestka"; } if($zaznamu_celkem > 6){$max=6;} else{$max=$zaznamu_celkem;} if($i = $max){ echo"<!-- konec 2. rady -->"; echo"</div>\n"; } } if($i == 7){ echo"<div id=\"rada-obrazku-3\">"; } if($i >= 7 and $i <= 9){ if($i % 7 == "0"){ echo $i." sedmicka"; } if($i % 8 == "0"){ echo $i." osmicka"; } if($i % 9 == "0"){ echo $i." devitka"; } if($zaznamu_celkem > 9){$max=9;} else{$max=$zaznamu_celkem;} if($i = $max){ echo"<!-- konec 3. rady -->"; echo"</div>\n"; } } } ?> A generuje mi to toto: <div id="rada-obrazku-1">1 jednicka<!-- konec 1. rady --></div> <div id="rada-obrazku-2">4 ctyrka<!-- konec 2. rady --></div> <div id="rada-obrazku-3">7 sedmicka<!-- konec 3. rady --></div> Ale přitom podle mě, by mi to mělo generovat toto: <div id="rada-obrazku-1">1 jednicka 2 dvojka 3 trojka<!-- konec 1. rady --></div> <div id="rada-obrazku-2">4 ctyrka 5 petka 6 sestka<!-- konec 2. rady --></div> <div id="rada-obrazku-3">7 sedmicka 8 osmicka 9 devitka<!-- konec 3. rady --></div> Kde dělám chybu? |
||
Tori Profil |
#2 · Zasláno: 4. 10. 2011, 11:53:23 · Upravil/a: Tori
Řádky 24,44,64 - přepisujete si hodnotu $i místo porovnání.
K čemu to celé slouží - jestli jen generujete tabulku 3 x 3 buňky, nedalo by se použít dvakrát for? echo '<table>'; // řádky: for ($i = 1; $i <= 3; $i++) { echo '<tr>'; // sloupce: for ($j = 1; $j <= 3; $j++) { echo "<td>$i - $j</td>"; } echo '</tr>'; } echo '</table>'; |
||
Ben Profil * |
#3 · Zasláno: 4. 10. 2011, 12:15:35
Tori:
Děkuju, to přiřazování hodnoty místo porovnání jsem přehlédl. To je přesně ono. Ještě jsem to trochu upravil. Jinak tu tabulku přes <table>, <tr>, <td> udělat bohužel nemůžu. Děkuju B-) |
||
Joker Profil |
#4 · Zasláno: 4. 10. 2011, 15:01:32
Ben:
Nic ve zlém, ale kód v [#1] je celý špatně, doporučil bych nejdřív s pomocí nějaké učebnice nebo školení nastudovat základy PHP. Když jsem kdysi dávno narazil na článečky o for-case paradigmatu (resp. loop-switch antipattern, druhý článek, stránka na wiki), říkal jsem si, jak něco takového vůbec může vzniknout. Mohu se tedy zeptat, jaká myšlenka vede k tomu vytvořit for-cyklus a v něm postupně kód pro i=1, i=2, i=3, atd? Zkusím ještě upozornit na technické chyby, i když zdůrazňuji, že i po jejich opravení bude pořád špatně ten algoritmus jako takový: $zaznamu_celkem = (int)9; // Přetypování čísla na číslo? A dobrý pokus dát počet záznamů do proměnné, ale ne že by ten kód fungoval třeba pro 10 for ($i = 1; $i <= 9; $i++){ // O řádek výše je na počet záznamů proměnná $i=(int)$i; // Zase přetypování čísla na číslo, tenhle řádek je úplně zbytečný if($i == 1){ // loop-switch antipattern, if je zbytečný echo"<div id=\"rada-obrazku-1\">"; // a tohle má být před cyklem } if($i >= 1 and $i <= 3){ if($i % 1 == "0"){ // Tenhle příkaz je perla. Za prvé nula jako řetězec, za druhé i%1 je 0 pro libovolné i. echo $i." jednicka"; } if($i % 2 == "0"){ // Nula jako řetězec a myslím že autor netuší co vlastně dělá operátor %. echo $i." dvojka"; } if($i % 3 == "0"){ // viz výše echo $i." trojka"; } if($zaznamu_celkem > 3){$max=3;} else{$max=$zaznamu_celkem;} // Proč se tohle dělá při každém běhu cyklu? if($i = $max){ // = je přiřazení, viz Tori echo"<!-- konec 1. rady -->"; echo"</div>\n"; } } if($i == 4){ echo"<div id=\"rada-obrazku-2\">"; } if($i >= 4 and $i <= 6){ if($i % 4 == "0"){ // Viz výše echo $i." ctyrka"; } if($i % 5 == "0"){ // Viz výše echo $i." dpetka"; } if($i % 6 == "0"){ // Viz výše echo $i." sestka"; } if($zaznamu_celkem > 6){$max=6;} else{$max=$zaznamu_celkem;} // Viz výše if($i = $max){ // Viz výše echo"<!-- konec 2. rady -->"; echo"</div>\n"; } } if($i == 7){ echo"<div id=\"rada-obrazku-3\">"; } if($i >= 7 and $i <= 9){ if($i % 7 == "0"){ // Viz výše echo $i." sedmicka"; } if($i % 8 == "0"){ // Viz výše echo $i." osmicka"; } if($i % 9 == "0"){ // Viz výše echo $i." devitka"; } if($zaznamu_celkem > 9){$max=9;} else{$max=$zaznamu_celkem;} // Viz výše if($i = $max){ // Viz výše echo"<!-- konec 3. rady -->"; echo"</div>\n"; } } } ?> |
||
Ben Profil * |
#5 · Zasláno: 5. 10. 2011, 22:29:06
Joker:
Děkuju za reakci a zpětnou vazbu. Nicméně, tento případ je již celý předělaný. Některé věci, které se vám zdali divné, to je ovšem díky neznalosti celého kontextu pochopitelné. Některé věci jsou úplně předělané. Děkuju |
||
Časová prodleva: 13 let
|
0