NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
Avatar
Dominik Gavrecký:16.1.2016 13:32

Zdravím,

naskytol sa mi menší mind-fuck potreboval by som použiť foreach v poli.

$premena =
            array(
                array(
                    'id' => 's',
                    'type' => 's',
                    'host' => 's',
                ),
                array(
                    'id' => 'a',
                    'type' => 's',
                    'host' => 's',
                ),
            );

Skúšal som dať foreach sem ale bez úspechu

$premena =
            array(
                //foreach
                array(
                    'id' => 's',
                    'type' => 's',
                    'host' => 's',
                ),
            );

Ďakujem všetkým

Odpovědět
16.1.2016 13:32
Hlupák nie je ten kto niečo nevie, hlupákom sa stávaš v momente keď sa na to bojíš opýtať.
Avatar
Odpovídá na Dominik Gavrecký
Neaktivní uživatel:16.1.2016 13:37

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.

Editováno 16.1.2016 13:38
Nahoru Odpovědět
16.1.2016 13:37
Neaktivní uživatelský účet
Avatar
Dominik Gavrecký:16.1.2016 13:51

Ono je jedno pole v ktorom sú ostatne polia v závislosti od počtu v DB

Nahoru Odpovědět
16.1.2016 13:51
Hlupák nie je ten kto niečo nevie, hlupákom sa stávaš v momente keď sa na to bojíš opýtať.
Avatar
Odpovídá na Neaktivní uživatel
Dominik Gavrecký:16.1.2016 13:55

ale to prvé pole je vždy iba jedno teda už ho do foreachu dať nepotrebujem

Nahoru Odpovědět
16.1.2016 13:55
Hlupák nie je ten kto niečo nevie, hlupákom sa stávaš v momente keď sa na to bojíš opýtať.
Avatar
Odpovídá na Dominik Gavrecký
Neaktivní uživatel:16.1.2016 14:10

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?

Nahoru Odpovědět
16.1.2016 14:10
Neaktivní uživatelský účet
Avatar
Odpovídá na Dominik Gavrecký
Štefan Pružinský:16.1.2016 14:13

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. :)

Editováno 16.1.2016 14:16
Nahoru Odpovědět
16.1.2016 14:13
Najefektívnejším spôsobom debuggingu je modlitba. :)
Avatar
Odpovídá na Štefan Pružinský
Dominik Gavrecký:16.1.2016 14:29

chybova hláška: Argument 1 passed to GameQ::addServer() must be of the type array, object given

Nahoru Odpovědět
16.1.2016 14:29
Hlupák nie je ten kto niečo nevie, hlupákom sa stávaš v momente keď sa na to bojíš opýtať.
Avatar
Odpovídá na Dominik Gavrecký
Štefan Pružinský:16.1.2016 14:33

Pravdepodobne do toho foreach-u nevkladáš pole, ale niečo iné... Skús poslať väčší fragment kódu... :)

Nahoru Odpovědět
16.1.2016 14:33
Najefektívnejším spôsobom debuggingu je modlitba. :)
Avatar
Odpovídá na Štefan Pružinský
Dominik Gavrecký:16.1.2016 14:35
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();

   }
Nahoru Odpovědět
16.1.2016 14:35
Hlupák nie je ten kto niečo nevie, hlupákom sa stávaš v momente keď sa na to bojíš opýtať.
Avatar
Dominik Gavrecký:16.1.2016 14:36

Možno som zabudol dodať že to píšem v nette ale myslím že tu to nie je podstatné.

Nahoru Odpovědět
16.1.2016 14:36
Hlupák nie je ten kto niečo nevie, hlupákom sa stávaš v momente keď sa na to bojíš opýtať.
Avatar
Odpovídá na Dominik Gavrecký
Štefan Pružinský:16.1.2016 14:51

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. :)

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
16.1.2016 14:51
Najefektívnejším spôsobom debuggingu je modlitba. :)
Avatar
Odpovídá na Dominik Gavrecký
Štefan Pružinský:16.1.2016 14:54

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... :)

Nahoru Odpovědět
16.1.2016 14:54
Najefektívnejším spôsobom debuggingu je modlitba. :)
Avatar
Odpovídá na Štefan Pružinský
Dominik Gavrecký:16.1.2016 15:00

Ďakujem ti funguje to mohol by si mi ešte skúsiť popísať čo si myslel pod pojmom iteračná premena ?

Nahoru Odpovědět
16.1.2016 15:00
Hlupák nie je ten kto niečo nevie, hlupákom sa stávaš v momente keď sa na to bojíš opýtať.
Avatar
Odpovídá na Dominik Gavrecký
Štefan Pružinský:16.1.2016 15:29

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. :)

Nahoru Odpovědět
16.1.2016 15:29
Najefektívnejším spôsobom debuggingu je modlitba. :)
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 14 zpráv z 14.