Autor Zpráva
Ben
Profil *
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."&nbsp; jednicka";
      }
      if($i % 2 == "0"){
        echo $i."&nbsp; dvojka";
      }
      if($i % 3 == "0"){
        echo $i."&nbsp; 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."&nbsp; ctyrka";
      }
      if($i % 5 == "0"){
        echo $i."&nbsp; dpetka";
      }
      if($i % 6 == "0"){
        echo $i."&nbsp; 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."&nbsp; sedmicka";
      }
      if($i % 8 == "0"){
        echo $i."&nbsp; osmicka";
      }
      if($i % 9 == "0"){
        echo $i."&nbsp; 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&nbsp; jednicka<!-- konec 1. rady --></div>
<div id="rada-obrazku-2">4&nbsp; ctyrka<!-- konec 2. rady --></div>
<div id="rada-obrazku-3">7&nbsp; sedmicka<!-- konec 3. rady --></div>


Ale přitom podle mě, by mi to mělo generovat toto:
<div id="rada-obrazku-1">1&nbsp; jednicka 2&nbsp; dvojka 3&nbsp; trojka<!-- konec 1. rady --></div>
<div id="rada-obrazku-2">4&nbsp; ctyrka 5&nbsp; petka 6&nbsp; sestka<!-- konec 2. rady --></div>
<div id="rada-obrazku-3">7&nbsp; sedmicka 8&nbsp; osmicka 9&nbsp; devitka<!-- konec 3. rady --></div>


Kde dělám chybu?
Tori
Profil
Řá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 *
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
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."&nbsp; jednicka"; 
      } 
      if($i % 2 == "0"){ // Nula jako řetězec a myslím že autor netuší co vlastně dělá operátor %.
        echo $i."&nbsp; dvojka"; 
      } 
      if($i % 3 == "0"){ // viz výše
        echo $i."&nbsp; 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."&nbsp; ctyrka"; 
      } 
      if($i % 5 == "0"){ // Viz výše 
        echo $i."&nbsp; dpetka"; 
      } 
      if($i % 6 == "0"){  // Viz výše
        echo $i."&nbsp; 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."&nbsp; sedmicka"; 
      } 
      if($i % 8 == "0"){  // Viz výše
        echo $i."&nbsp; osmicka"; 
      } 
      if($i % 9 == "0"){  // Viz výše
        echo $i."&nbsp; 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 *
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

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:

0