NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
Avatar
Mario Brunmayr:21.6.2017 2:46

Ahoj mám asociativní pole polí, po printnutí má tuto podobu.

Array ( [0] => Array ( [url] => uvodd [0] => uvodd ) [1] => Array ( [url] => zadejteURL [0] => zadejteURL ) [2] => Array ( [url] => prihlaseni [0] => prihlaseni ) [3] => Array ( [url] => fwfw [0] => fwfw ) [4] => Array ( [url] => registrace [0] => registrace ) [5] => Array ( [url] => jidelnicek [0] => jidelnicek ) )

a potřeboval by jsem foreach cyklem projít toto pole a získat pouze hodnotu v neduplicitním stavu. Nejdál se mi porařilo pouze získat hodnotu s duplicitním výpisem. skoušel jsem přistupovat jednotlivým polím pomocí for cyklu a zvyšujícího se indexu kde jsem měl vnořený foreach cyklus ale toto řešení mi vždy vypsalo duplicitně hodnotu. Data jsou získána pomocí SQL dotazu takže pole polí je jediná možnost jak data z tabulky získat s tím aby DB wrapper zůstal univerzální.

Předem moc děkuji za pomoc

Editováno 21.6.2017 2:46
 
Odpovědět
21.6.2017 2:46
Avatar
Mario Brunmayr:21.6.2017 2:49
foreach ($obsahStranky[0] as $odkazy)
{

        //$a .= ("ahoj");
                $a .= $odkazy;
  print_r($odkazy);


}

Tento kod mi vypíše duplicitní (po sobě stejnou) hodnotu, takže zabalení foreach cyklu do for cyklu který by zvišoval index u obsahStranky sam o sobe neřeší problém.

 
Nahoru Odpovědět
21.6.2017 2:49
Avatar
kaskader202
Člen
Avatar
Odpovídá na Mario Brunmayr
kaskader202:21.6.2017 10:29

ahoj, řešení je v tomto případě jednoduché, musíš se odkázat na daný index.
za předpokladu že platí $obsahStranky = Array ( [0] => Array ( [url] => uvodd [0] => uvodd ) [1] => Array ( [url] => zadejteURL [0] => zadejteURL ) [2] => Array ( [url] => prihlaseni [0] => prihlaseni ) [3] => Array ( [url] => fwfw [0] => fwfw ) [4] => Array ( [url] => registrace [0] => registrace ) [5] => Array ( [url] => jidelnicek [0] => jidelnicek ) )
tak kod bude vypadat takto:

foreach ($obsahStranky as $odkazy)
{
  print_r($odkazy['url']);
}

Cyklus procházi jednotlivá pole 0 - N, v ten moment máš v porměnné $odkazy pole na dan0m indexu v hlavním poli. Takže už ti stačí jen odkázat na index co chceš vytáhnout z daného "vnitřního" pole. Snad jsem to popsal pochopitelně.

 
Nahoru Odpovědět
21.6.2017 10:29
Avatar
Odpovídá na kaskader202
Mario Brunmayr:21.6.2017 13:33

tím získám všechny hodnoty ale nemůžu snima dále jednotlivě pracovat protože je to prostý string.

 
Nahoru Odpovědět
21.6.2017 13:33
Avatar
kaskader202
Člen
Avatar
Odpovídá na Mario Brunmayr
kaskader202:21.6.2017 14:22

Ja jsem ti napsal jak dostaneš neduplicitní hodnoty, ale já neví co stím chceš dál dělat. Napiš co stim dál a vymslíme to.

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
21.6.2017 14:22
Avatar
Odpovídá na kaskader202
Mario Brunmayr:21.6.2017 14:24

Prakticky co o tom premyslim tak potrebuji ziskat pouze posledni pole z pole na co by mohla byt v PHP funkce. Jdu trochu pogoglit a snad neco najdu. Prece jen ve dne se o tom premysli lepe nez ve 3. rano :-)

 
Nahoru Odpovědět
21.6.2017 14:24
Avatar
Odpovídá na kaskader202
Mario Brunmayr:21.6.2017 14:57
        foreach ($obsahStranky as $odkazy)
{

                $a[]=($odkazy['url']);
                //$a = (' ');
                //$a .= ('</a>');


                //print_r('ahoj');
}
print_r($a);
foreach ($a as $odkazy)
{               $aa .= ('<h1>');
                $aa .= ($odkazy);
                $aa .= ('</h1>');

}
                print_r($aa);

Hotove a funkcni. Dekuji za nasmerovani spravnym smerem :-)

Editováno 21.6.2017 14:57
 
Nahoru Odpovědět
21.6.2017 14:57
Avatar
kaskader202
Člen
Avatar
Odpovídá na Mario Brunmayr
kaskader202:21.6.2017 15:05

nebude toto lepší ?

foreach ($obsahStranky as $odkazy)
{

        echo '<h1>'.$odkazy['url'].'</h1>'

}

nebo napiš k čemu to chceš a co to má dělat.

Editováno 21.6.2017 15:07
 
Nahoru Odpovědět
21.6.2017 15:05
Avatar
Odpovídá na kaskader202
Mario Brunmayr:22.6.2017 2:57

Momentálně vypadá kod takto:

                foreach ($a as $odkazy){
                        $aa = '';
        for ($i = 0; $i < 4; $i++)
//
{               $aa .= ('</li><li class="nav-item"><a class="nav-link link" href="');
                $aa     .= ($a[$i]);
                $aa .= ('" aria-expanded="false">');
                $aa .= ($b[$i]);
                $aa .= ('</a>');
}
                        $aaa ='';
        for ($i = 4; $i < 16; $i++)
{

                $aaa .= ('<a class="dropdown-item" href="');
                $aaa .= ($a[$i]);
                $aaa .= ('">');
                $aaa .= ($b[$i]);
                $aaa .= ('<br></a>');

}

}
                $aaaa=[
                $aa,
                $aaa
                ];
// print_r($aaaa);


        return $aaaa;

Kod funguje, pár věcí tam ještě budu vylepšovat spíše mě teď štve upozornění: Undefined offset: 14 in. Nějak se PHPčku nelíbí vkládání dat do $aa a $aaa. Jinak kod nacita udaje z DB aby mohl vypsat menu a for cyklus je kvuli tomu ze do sablony nemuzu vkladat vsechny odkazy do sablony, protoze se nevejdou.

Editováno 22.6.2017 2:59
 
Nahoru Odpovědět
22.6.2017 2:57
Avatar
Mario Brunmayr:22.6.2017 3:02

... Kompletni kod je:

        foreach ($obsahStranky as $odkazy)
{
                //$a .= ('</li><li class="nav-item"><a class="nav-link link" href="uvod" aria-expanded="false">');
                $b[]=($odkazy['titulek']);
                $a[]=($odkazy['url']);
//print_r ($b);
        }
//print_r($a);
                $x= -1;
                $aa = '';
                $aaa = '';
                foreach ($a as $odkazy){
                        $aa = '';
        for ($i = 0; $i < 4; $i++)
//
{               $aa .= ('</li><li class="nav-item"><a class="nav-link link" href="');
                $aa     .= ($a[$i]);
                $aa .= ('" aria-expanded="false">');
                $aa .= ($b[$i]);
                $aa .= ('</a>');
}
                        $aaa ='';
        for ($i = 4; $i < 16; $i++)
{

                $aaa .= ('<a class="dropdown-item" href="');
                $aaa .= ($a[$i]);
                $aaa .= ('">');
                $aaa .= ($b[$i]);
                $aaa .= ('<br></a>');

}

}
                $aaaa=[
                $aa,
                $aaa
                ];
// print_r($aaaa);


                return $aaaa;
 
Nahoru Odpovědět
22.6.2017 3:02
Avatar
kaskader202
Člen
Avatar
Odpovídá na Mario Brunmayr
kaskader202:22.6.2017 10:46

Možná bych popřemýšlel o jiné databázové struktuře. Protože pokud ted přidáš jednu položku tak to budeš muset celé přepsat. Být tebou naučím se nejdřiv pořádně použivat zakladní funkce PHP a něco si o tom zijstit. Protože to co tu píšeš je opravdu něco co nění hezký.

  1. proč dáváš vše do závorek ?
  2. spojovaní řetězcu ce dá dělat na jednom řádku. Doporučil bych funkci sprintf(), která to dost zpřehlední.
  3. názvy proměnných by měli reprezentovat co nesou.
  4. Asi bych se zkusil podívat zde na webu, je to už neco podobného vytvořené IT network menu
 
Nahoru Odpovědět
22.6.2017 10:46
Avatar
Odpovídá na kaskader202
Mario Brunmayr:22.6.2017 12:36

1. bod: zvyk, prakticky je to jedno ne ?

2.bod: Ano, toto předělám

3:bod: vytvářeno systémem pokus omyl, přepíšu je

4.bod: Děkuji za tip, určitě kouknu

Jinak s tím přepsáním ano momentálně jo ale přidám databázový dotaz který mi vrátí počet řádků tabulce a danou proměnou dosadim místo čísla 16.

 
Nahoru Odpovědět
22.6.2017 12:36
Avatar
Mario Brunmayr:22.6.2017 16:38
        foreach ($obsahStranky as $odkazy)
{
                //$a .= ('</li><li class="nav-item"><a class="nav-link link" href="uvod" aria-expanded="false">');
                $titulek[]=($odkazy['titulek']);
                $url[]=($odkazy['url']);
                                $pocet=count($url);
//print_r ($pocet);
        }
//print_r($a);
              //$x= -1;

                foreach ($url as $odkazy){
                        $menu1 = '';
        for ($i = 0; $i < 4; $i++)
//
{
                        $menu1 .= ('</li><li class="nav-item"><a class="nav-link link" href="'.$url[$i].'" aria-expanded="false">'.$titulek[$i].'</a>');

}
                                        $menu2='';
        for ($i = 4; $i < $pocet; $i++)
{

                $menu2 .= ('<a class="dropdown-item" href="'.$url[$i].'">'.$titulek[$i].'<br></a>');


}

}
                $PoleMenu=[
                $menu1,
                $menu2
                ];
// print_r($aaaa);


                return $PoleMenu;

Konečná podoba než si přečtu nějaký článek, který mi řekne že to dělám úplně blbě :-D

 
Nahoru Odpovědět
22.6.2017 16:38
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 13 zpráv z 13.