Diskuze: Foreach v poli
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Tvůrce
Zobrazeno 14 zpráv z 14.
//= 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.
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.