Diskuze: foreach -> Po vyprázdnění zopakovat.
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Člen
Zobrazeno 11 zpráv z 11.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Ještě přidávám fotku jen pro orientaci jak to vypadá aktuálně s menší úpravou html, ale nemám to ještě stylizovaný ! Potřebuji samozřejmě opakovat ty jména pod všechny ty datumy (možná jsme jen už unavenej dneska).
zaprvé pojmenovávej proměnné trochu rozměji než
$this->data2['data']
pokud tě dobře chápu tak pole které potřebuješ vipadá nějak takto
Array
(
[0] => Array
(
[den] => 1
[mesic] => 1
[rok] => 2015
[od] => 10:00
[do] => 11:00
[zaci] => Array
(
[0] => Array
(
[jmeno] => Tomas
[prijmeni] => Tak
[popis] => Popisi jsou otrava:)
)
[1] => Array
(
[jmeno] => Jan
[prijmeni] => Otloukal
[popis] => Popisi jsou otrava:)
)
)
)
[1] => Array
(
[den] => 1
[mesic] => 1
[rok] => 2015
[od] => 10:00
[do] => 11:00
[zaci] => Array
(
[0] => Array
(
[jmeno] => Tomas
[prijmeni] => Tak
[popis] => Popisi jsou otrava:)
)
[1] => Array
(
[jmeno] => Jan
[prijmeni] => Otloukal
[popis] => Popisi jsou otrava:)
)
)
)
)
a v šavloně pak budes postupovat takto
foreach($kurzy as $kurz){
echo $kurz['den'].'.'.$kurz['mesic'].'.'.$kurz['rok'].'<br>';
foreach($kurz['zaci'] as $zak){
echo $zak['jmeno'].' '.$zak['prijmeni'].' '.$zak['popis'].'<br>';
}
echo '<br>';
}
html tag si doplň podle potřeby
Vzhledem k tomu, že data přenáším mezi pohledem a kontrolerem (2 různé soubory) tak mám univerzální nosič a tak v tomto pro mě má logický název, ale jinde bych to použil lépe určitě.
Každopádně tvoje odpověď kopíruje co již mám. Jen jsi použil jiné názvy.
předpokládám že vycházíš ze zdejšího tutorialu vhodnější by bylo použít v controleru
$this->data['kurzy'] = $DataSQL->zobrazitTerminy($_GET['kurz']);
v pohledu pak puziješ
foreach($kurzy as $kurz){
...
}
ja mám jinak poskládané to pole, pokud si ho sestavíš tak že žáci budou součásti pole kurzy, bude naprosto jasné kteří žáci patři do kterého kurzu. V tuto chvíli to z tvého pole popisu tak nevypadá, ale možná jenom špatně chápu tvůj postup
Až přijdu domů z práce zkusím se lépe podívat na to co jsi napsal, ale připadá mi to stejné. Ale jinak ano, MVC jsem se učil zde a tak jsem některé procesy samozřejmě zachoval, protože mi logika připadá úplně úžasná v php
Tak jsem předělal část struktury a děkuji moc za nalezení divné chyby a tím i tedy mohu jmenovat ty proměnné.
Ale co se týče problému, který řeším tak nevím jak.
Aktuální Kontroler:
$this->data['kurzy'] = $DataSQL->sqlSelect('*', 'tk_kurzy', 'id', $parametry[0]);
$this->data['terminy'] = $DataSQL->zobrazitTerminy($parametry[0]);
$this->data['zaky'] = $DataSQL->zobrazitZaky($parametry[0]);
$this->pohled = 'kurz';
Pohled:
foreach($terminy as $termin)
{
echo "
<tr>
<th>".$termin['den']."/".$termin['mesic']."/".$termin['rok']." - ".$termin['od']." / ".$termin['do']."</th>
</tr>";
foreach($zaky as $zak)
{
echo "
<tr>
<td>".$zak['jmeno']."</td>
<td>".$zak['prijmeni']."</td>
<td>".$zak['popis']."</td>
</tr>";
}
}
Každopádně mám 2 pole a pakliže udělám podřazené což mi nejde vložit oba $DataSQL do $this->data['X'] tak si nejsem jist jestli to náhodou neudělá to samé?
Výsledek je v tomto případě stejný, prakticky se nic nezměnilo.
jestli maji byt ke kademu kurzu stejni zaci tak by to melo fungovat tak jak
to mas pok ne tak musi ke kazdemu kurzu pridat pole tech zaku tak jak to mam
naznaceno vise
napis mi pripadne PM a muzem to vyresit pres skype at to neresime tyden
Právě že se žáci vysypou jen pod první datum a pak už se nesypou. Datum samozřejmě vypíše... Foreach pole se vyprázdní a pak už se nezopakuje. Zkoušel jsem udělat i vnořené pole a výsledek je stejný. Trávím tady hodiny nad blbostí, ale rád bych to udělal bez zbytečností
Napsal jsem
foreach($terminy as $termin)
{
echo "
<tr>
<th>".$termin['den']."</th>
</tr>";
foreach($zaky as $zak)
{
$test[] = "
<tr>
<td>".$zak['jmeno']."</td>
<td>".$zak['prijmeni']."</td>
<td>".$zak['popis']."</td>
</tr>";
$i++;
}
for($a=0; $a < $i; $a++)
{
echo "<tr><td>".$test[$a]."</td></tr>";
}
}
Jedině takto dokážu co jsem chtěl ... Vysypu přes foreach obsah do $test a pak už jen opakuji počtem.
Problém byl zakopán úplně někde jinde a to v metodě na získávaní dat z DB
public static function dotaz($sql, $parametry = array()) {
$dotaz = self::$spojeni->prepare($sql);
$dotaz->execute($parametry);
return $dotaz;
}
//mělo to být takto
public static function dotaz($sql, $parametry = array()) {
$dotaz = self::$spojeni->prepare($sql);
$dotaz->execute($parametry);
return $dotaz->fetchAll();
}
Zobrazeno 11 zpráv z 11.