Autor | Zpráva | ||
---|---|---|---|
Tomáš123 Profil |
#1 · Zasláno: 30. 10. 2014, 19:05:58
Ahoj
Potreboval by som, aby mi PHP skript po obdržaní vstupu od užívateľa vytvoril tabuľku podľa zadaného počtu stĺpcov a riadkov. V HTML sa však nanešťastie tabuľky tvoria kaskádovo. Môj problém spočíva v tom, že neviem ako určité množstvo buniek obaliť riadkom. Funkcia na tvorenie buniek vyzerá takto: <?php function createCols($cols, $defltCols=0) { if ($cols > $defltCols) { echo "<td>a</td>\n"; $defltCols++; createCols($cols, $defltCols); } } $cols = 8; echo "<table border=1><tr>"; createCols($cols); echo "</tr></table>"; ?> Druhá funkcia by mala zistiť, aký počet riadkov si užívateľ vyžiadal a pred každou sériou buniek riadok otvoriť <tr> , a na konci zas uzavrieť </tr> .
Ak existuje jednoduchší spôsob ako vytvoriť tabuľku požadovanej veľkosti, budem rád ak ma s ňou zoznámite. Vopred ďakujem za rady |
||
lionel messi Profil |
#2 · Zasláno: 30. 10. 2014, 19:10:09
Tomáš123:
Neštudoval som to podrobne, ale Základní kurz 11: Cykly nepomôže? |
||
Tomáš123 Profil |
lionel messi:
„Neštudoval som to podrobne, ale Základní kurz 11: Cykly nepomôže?“ |
||
Tomáš123 Profil |
#4 · Zasláno: 30. 10. 2014, 20:32:43
Skúsil som to podľa péhapka... Výsledok vyzerá takto:
<?php $rows = 5; $cols = 4; $value = "value"; echo "<table border=1>"; for ($defltRows = 1, $rows == $deftRows, $defltRows++) { echo "<tr>"; for ($defltCols = 1, $cols == $defltCols, $defltCols++) { printf ("<td>%s</td>", $value); } echo "</tr>"; } echo "</table>"; ?> Viete mi napísať, čo je na to skripte zle a ako ho prerobiť, aby robil to, čo potrebujem? Ďakujem |
||
lionel messi Profil |
Tomáš123:
„A jediné na čo sa tento skript zmohol je chybová hláška, ktorá hlása, že na riadku číslo 6 sa očakáva ';' namiesto ')'.“ Skús: <?php $rows = 5; $cols = 4; $value = "value"; echo "<table border=1>"; for ($defltRows = 1; $rows >= $deftRows; $defltRows++) { echo "<tr>"; for ($defltCols = 1; $cols >= $defltCols; $defltCols++) { printf ("<td>%s</td>", $value); } echo "</tr>"; } echo "</table>"; ?> |
||
mimochodec Profil |
Nechci se vám do to míchat, ale správná syntaxe for je
for ($i = 1; $i <= 10; $i++) { echo $i; } |
||
TomasJ Profil |
Tomáš123:
„A jediné na čo sa tento skript zmohol je chybová hláška, ktorá hlása, že na riadku číslo 6 sa očakáva ';' namiesto ')'.“ Logicky, protože cyklus má vypadat takto: for(deklarace proměnné; podmínka; akce) { } for($i = 0; $i < $pocetNeceho; $i++) { } Edit: Mám dobrou náladu tak pomůžu při tvorbě. function vytvorSloupceTabulky($obsahSloupcu) { $vystup = Array(); foreach($obsahSloupcu as $sloupec) { array_push($vystup, "<td>{$sloupec}</td>"); } return implode("\n", $vystup); } $sloupce = Array("prvni", "druhy"); echo "<table><tr>"; echo vytvorSloupceTabulky($sloupce); echo "</tr></table>"; |
||
lionel messi Profil |
#8 · Zasláno: 30. 10. 2014, 20:49:08
mimochodec:
„Nechci se vám do to míchat,“ Pokojne sa nám, 2 amatérom, do toho miešaj aj naďalej, svoj omyl som si vzápätí uvedomil, ale lepšie opraviť 2-krát, ako ani raz. :-) |
||
Tomáš123 Profil |
mimochodec, TomasJ:
A víťazom sa stáva mimochodec s náskokom 16 sekúnd. Blahoželáme. mimochodec, TomasJ, lionel messi: Chyba bola tam. Po úprave však skript neurobí absolútne nič. Nevypíše chybu, ani nezobrazí požadovaný obsah. Aktuálna verzia: <?php $rows = 5; $cols = 4; $value = "value"; echo "<table>"; for ($defltRows = 1; $rows == $defltRows; $defltRows++) { echo "<tr>"; for ($defltCols = 1; $cols == $defltCols; $defltCols++) { echo "<td>.$value.</td>"; } echo "</tr>"; } echo "</table>"; ?> |
||
mimochodec Profil |
#10 · Zasláno: 30. 10. 2014, 20:58:45
Tomáš123:
Já jsem hlavně úplně nepochopil, čeho chceš dosáhnout. Můžeš se vyhnout slovům kaskádovo a rekurzia a popsat, co vlastně chceš? |
||
Tomáš123 Profil |
#11 · Zasláno: 30. 10. 2014, 21:03:53
mimochodec:
„Můžeš se vyhnout slovům kaskádovo a rekurzia a popsat, co vlastně chceš?“ kaskádovo = Bunka tabuľky je v riadku tabuľky. <tr> <td>Obsah </td> </tr> Preto mám problém vytvoriť skript, ktorý by mi podľa vstupu (v podobe 2 čísel, teda počtu riadkov a počtu stĺpcov) vytvoril požadovanú tabuľku. TomasJ: „Mám dobrou náladu tak pomůžu při tvorbě.“ Ďakujem za snahu, ale problém je v niečom inom. O pár riadkov vyššie som sa to snažil vysvetliť momochodcovi. |
||
mimochodec Profil |
Tomáš123:
Já bych o nějaké kaskádovitosti nebo rekurzi mluvil až kdyby se vkládaly tabulky do tabulek apod. echo "<table>"; for ($i = 1; $i <= $pocetradku; $i++) { echo "<tr>"; for ($j = 1; $j <= $pocetsloupcu; $j++) { echo "<td>".($i*$j)."</td>"; } echo "</tr>"; } echo "</table>"; edit: opraven překlep |
||
Tomáš123 Profil |
mimochodec:
„Já bych o nějaké kaskádovitosti nebo rekurzi mluvil až kdyby se vkládaly tabulky do tabulek apod.“ Možno som to zbytočne prehnal, každopádne, jediný rozdiel medzi tvojim a mojim kódom je v názve premenných a operátoroch porovnávania. Teoreticky mám rovnaký skript ako ty (čo mi celkom lichotí, lebo som iba začiatočník). Jediný viditeľný rozdiel je v sfarbení HTML kódov (zatiaľ čo ty máš kód červenou, ja mám červené iba niektoré úvodzovky)... Nevidíš nejakú chybu v mojom kóde? Alebo je rozdiel v tom, že so použil printf ?
Dík za kód ;) Rozdiel v kóde je ešte na riadku 5. Čo si mienil týmto ($i*$j) ?
|
||
mimochodec Profil |
Tomáš123:
Já vidím hlavní přednost toho svého v tom, že v těch cyklech inkrementuju, dokud není dosaženo hodnoty, zatímco ty bys inkrementoval v případě, že proměnná, kterou jsi nastavil na 1, by dosáhla 5, k čemuž jí nijak nepomáháš :) „Čo si mienil týmto ($i*$j)?“ Abych tu tabulku nenechal úplně prázdnou, pojal jsem ji jaiko násobilku do deseti. A ještě technicky: toto opravdu není rekurze. Rekurze je, když uvnitř funkce použiješ právě ji. |
||
Tomáš123 Profil |
#15 · Zasláno: 30. 10. 2014, 21:39:16
mimochodec:
„zatímco ty bys inkrementoval v případě, že proměnná, kterou jsi nastavil na 1, by dosáhla 5, k čemuž jí nijak nepomáháš :)“ Aj po zmenení operátora na "<=" je výsledok rovnaký ako v [#9]. „A ještě technicky: toto opravdu není rekurze. Rekurze je, když uvnitř funkce použiješ právě ji.“ To viem. V [#1] to ešte bola rekurzia... Potom lionel navrhol príkaz for a odvtedy už to rekurziou nenazývam :).
|
||
TomasJ Profil |
Tomáš123:
„Ďakujem za snahu, ale problém je v niečom inom. O pár riadkov vyššie som sa to snažil vysvetliť momochodcovi.“ Tys mě nepochopil, poslal jsem ti tvoje "vymyšlení principu". Neposílal jsem ti celý kód. Očekával jsem, že do toho vložíš vlastní iniciativu a ten "můj" princip si rozšíříš. Jinak ten cyklus v [#9] ti nejde proto, že sis nečetl můj příspěvek [#7], kde máš napsané, jak má vypadat syntakticky správný zápis cyklu a jaké obsahuje hodnoty. Zároveň porovnáváš, jestli maximální počet je menší nebo roven aktuálnímu počtu (což je při prvním spuštění cyklu podmínka 5 <= 1) a to se nikdy nesplní. [#12] mimochodec: Tento tvůj cyklus pojede o 1 řádek a 1 buňku méněkrát, jelikož počáteční stavy proměnných $i a $j jsou 1. Aby se vykonal cyklus tolikrát, kolik je v proměnné $pocetXXX, musí být počáteční hodnota 0, nebo operátor z < na <=. |
||
Tomáš123 Profil |
#17 · Zasláno: 30. 10. 2014, 22:02:11
TomasJ:
„Tys mě nepochopil, poslal jsem ti tvoje "vymyšlení principu".“ Iste, prepáč. Očividne však zatiaľ nie som schopný tvoje riešenie pochopiť. Je to na mňa príliš zložité. „Jinak ten cyklus v [#9] ti nejde proto, že sis nečetl můj příspěvek [#7], kde máš napsané, jak má vypadat syntakticky správný zápis cyklu a jaké obsahuje hodnoty.“ Už viem, ďakujem. Čudoval som sa, prečo mi mimochodcov skript funguje a ten môj nie. Problém bol v opačnom porovnávaní premenných. Môj problém bol v tom, že či už bola jedna strana menšia, rovná alebo väčšia ako počet riadkov resp. stĺpcov, pre druhú stranu to neznamenalo absolútne nič. Preto ani skript nič nevypísal. Teraz som vymenil poradie z $rows <= $defltRows na $defltRows <= $rows a už to funguje aj mne. Ak by nebol jasný koreň problému, pridávam súčasný kód:
<?php $rows = 5; $cols = 4; $value = "value"; echo "<table border=1>"; for ($defltRows = 1; $defltRows <= $rows; $defltRows++) { echo "<tr>"; for ($defltCols = 1; $defltCols <= $cols; $defltCols++) { echo "<td>a</td>"; } echo "</tr>"; } echo "</table>"; ?> Ďakujem Vám všetkým za nakopnutie správnym smerom. |
||
Časová prodleva: 9 let
|
0