Diskuze: Foreach v poli
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 14 zpráv z 14.
K personalizaci obsahu a reklam, poskytování funkcí sociálních médií a analýze naší návštěvnosti využíváme soubory cookie. Informace o tom, jak náš web používáte, sdílíme se svými partnery pro sociální média, inzerci a analýzy. Partneři tyto údaje mohou zkombinovat s dalšími informacemi, které jste jim poskytli nebo které získali v důsledku toho, že používáte jejich služby.
Používáme nezbytné cookies pro fungování webu a s tvým souhlasem také analytické a marketingové cookies.
Zajišťují základní funkce, bezpečnost a služby, které sis vyžádal. Nelze je vypnout.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| ITnetwork | ITnetwork | Provoz webu, relace, přihlášení a uložení nastavení cookies. | PHPSESSID, auth_token, sid, itn_consent_impression, __Host-itn_consent | Relace až 1 rok |
| Google Tag Manager | Správa značek a načítání měřicích nástrojů webu. | Žádné | Neukládá se | |
| Google Fonts | Načítání typografie webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google Hosted Libraries | Načítání potřebných knihoven a stylů webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google reCAPTCHA | Ochrana formulářů a webu před zneužitím. | _GRECAPTCHA, rc::a, rc::b, rc::c, rc::f | Relace až 180 dní | |
| YouTube | Přehrávání vloženého video obsahu. | localStorage, IndexedDB; cookies after playback interaction | Relace až trvalé úložiště | |
| Vimeo | Vimeo | Přehrávání vloženého video obsahu. | __cf_bm, _cfuvid, vuid, localStorage, IndexedDB | Relace až 2 roky |
| Facebook Login | Meta | Přihlášení pomocí účtu třetí strany. | Úložiště řízené poskytovatelem | Relace až 1 rok |
| GoPay | GoPay | Zpracování uživatelem vyžádané platby. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
Pomáhají nám porozumět používání webu a zlepšovat ho.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Analytics 4 | Měření návštěvnosti a používání webu. | _ga, _ga_* | Až 2 roky | |
| Microsoft Clarity | Microsoft | Měření návštěvnosti a používání webu. | _clck, _clsk, _cltk | Relace až 1 rok |
Slouží k měření kampaní, personalizaci reklamy a marketingové komunikaci.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Ads | Měření kampaní, reklama a remarketing. | _gcl_au, _gcl_ls | Relace až 90 dní | |
| Meta Pixel | Meta | Měření kampaní, reklama a remarketing. | _fbp, _fbc, localStorage | Až 90 dní |
| Sklik | Seznam.cz | Měření kampaní, reklama a remarketing. | retargeting, sid, szn:* | Relace až trvalé úložiště |
| LinkedIn Insight | Měření kampaní, reklama a remarketing. | bcookie, li_gc, lidc, __cf_bm | Relace až 1 rok | |
| Ecomail | Ecomail.cz | Měření kampaní, reklama a remarketing. | ecmid, Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
| Atribuce kampaní ITnetwork | ITnetwork | Přiřazení návštěvy a objednávky ke kampani. | campaign_clid[*], user_session_context | Až 1 rok |
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Jestli máš jen dvourozměrné pole, bude stačit použít dvakrát foreach:
foreach ($pole as $item) {
foreach ($item as $data) {
...
}
}
Ale jestli nevíš kolika rozměrné to pole je, použij rekurzi.
function recursion($array) {
foreach ($array as $item) {
if (is_array($item))
recursion($item);
}
}
Něco takového. Asi jsem někde udělal chybu, píšu to ve spěchu.
Ono je jedno pole v ktorom sú ostatne polia v závislosti od počtu v DB
ale to prvé pole je vždy iba jedno teda už ho do foreachu dať nepotrebujem
Teď jsem to trochu nepochopil. Přes foreach ti to nefunguje? Jestli ne, píše ti to nějakou hlášku, nebo proč ti to nefunguje?
Ahoj,
predpokladám, že myslíš dynamické pole. To funguje v PHP takto:
$pole = array();
foreach($items as $item)
$pole[] = $item;
Táto konštrukcia ($pole[] = "something") Ti automaticky pridá
prvok na koniec poľa...je to vo svojej podstate ekvivalent List-u v C# alebo
Jave...
Snád Ti pomôže funkčná ukážka:
for ($i = 0; $i < 10; $i++)
{
$pole[] = array(
'id' => $i,
'name' => 'Name',
'surname' => 'Surname'
);
}
print_r($pole);
Dúfam, že som Ti aspoň trochu pomohol. 
chybova hláška: Argument 1 passed to GameQ::addServer() must be of the type array, object given
Pravdepodobne do toho foreach-u nevkladáš pole, ale niečo iné...
Skús poslať väčší fragment kódu... 
public function renderRow()
{
$data = $this->serversManager->Fetchserver();
$servers = array();
foreach($data as $d)
$servers[] = $d;
for ($i = 0; $i < 10; $i++)
{
$servers[] = array(
'id' => $d['id'],
'type' => 'cs16',
'host' => $d['host']
);
}
$gameq = new GameQ();
$gameq->addServers($servers);
$gameq->setOption('timeout', 3); // Seconds
$this->template->servers = $gameq->requestData();
}
Možno som zabudol dodať že to píšem v nette ale myslím že tu to nie je podstatné.
Problém je v tom, že ty pracuješ v druhom cykle s iteračnou premennou prvého cyklu - čo samozrejme nemôže fungovať... Malo by to byť nejak takto:
foreach($data as $d)
{
$servers[] = array(
'id' => $d['id'],
'type' => 'cs16',
'host' => $d['host']
);
}
Dúfam, že som to správne pochopil. 
A ten druhý cyklus celý vyhoď...prípadne ho môžeš použiť s tým, že
sa bude iterovať count($servers) - krát a k jednotlivým serverom
budeš pristupovať pomocou indexu na základe iteračnej premennej... 
Ďakujem ti funguje to mohol by si mi ešte skúsiť popísať čo si myslel pod pojmom iteračná premena ?
Iteračná premenná je premenná ktorá riadi, prípadne nesie hodnotu cyklu. Pri cykle for je iteračná premenná zároveň riadiacou premennou v cykle tzn. že pri každej tzv. "iterácii" (jedno prejdenie cyklu) sa overuje podmienka zadaná v hlavičke (inicializácii) daného cyklu:
for ($i = 0; $i < 10; i++)
//do some stuff
Inicializujeme (vytvoríme) iteračnú premennú i - len
na začiatku; overíme či je iteračná premenná (i) menšia ako 10
(alebo hocijaká iná podmienka) - $i < 10; navýšime hodnotu
iteračnej premennej o 1 (tzv. inkrementácia) - $i++. Toto sa opakuje
do chvíle kým podmienka platí...
Ďalší druh cyklu je foreach, ten taktiež má iteračnej premennú,
ale tá nie je riadiaca - k riadiacej premennej sa za normálnych okolností
pristupovať nedá (slúži pre vnútornú logiku programu). Iteračná
premenná v foreach cykle nesie hodnotu poľa na danom indexe, ktorý
sa zväčšuje každým prejdením cyklu a to až do vtedy kým nepresiahne
počet prvkov v poli...
Dúfam, že som Ti pomohol.
A
ďakujem Ti za i7 skill. 
Zobrazeno 14 zpráv z 14.
