Diskuze: Foreach v poli

PHP PHP Foreach v poli American English version English version

Avatar
Dominik Gavrecký:

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. ledna 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
Inoue Yūki
Redaktor
Avatar
Odpovídá na Dominik Gavrecký
Inoue Yūki:

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. ledna 13:38
Nahoru Odpovědět 16. ledna 13:37
Avatar
Dominik Gavrecký:

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

Nahoru Odpovědět 16. ledna 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 Inoue Yūki
Dominik Gavrecký:

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

Nahoru Odpovědět 16. ledna 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
Inoue Yūki
Redaktor
Avatar
Odpovídá na Dominik Gavrecký
Inoue Yūki:

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. ledna 14:10
Avatar
Odpovídá na Dominik Gavrecký
Štefan Pružinský:

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

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

Nahoru Odpovědět 16. ledna 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ý:

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

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

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. ledna 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ý:

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í
+1 bodů
Řešení problému
Nahoru Odpovědět 16. ledna 14:51
Najefektívnejším spôsobom debuggingu je modlitba. :)
Avatar
Odpovídá na Dominik Gavrecký
Štefan Pružinský:

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. ledna 14:54
Najefektívnejším spôsobom debuggingu je modlitba. :)
Avatar
Odpovídá na Štefan Pružinský
Dominik Gavrecký:

Ď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  +1 16. ledna 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ý:

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. ledna 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.