Autor | Zpráva | ||
---|---|---|---|
pole Profil * |
#1 · Zasláno: 9. 9. 2015, 14:16:31
Dobrý den,
Mám následující kód: $pole=array('jedna'=>array('a','b','c','d'),'dva','tri','ctyri'=>array('a','b')); foreach ($pole as $cislo) { echo '<li>'.$cislo; echo '<ul>'; foreach ($cislo as $pismenko) { echo '<li>'.$pismenko.'</li>'; } echo '</ul>'; } <li>jedna <ul> <li>a</li> <li>b</li> <li>c</li> <li>d</li> </ul> </li> <li>dva</li> <li>tri</li> <li>ctyri <ul> <li>a</li> <li>b</li> </ul> </li> <li>Array <ul> <li>a</li> <li>b</li> <li>c</li> <li>d</li> </ul> </li> <li>dva</li> <li>tri</li> <li>Array <ul> <li>a</li> <li>b</li> </ul> </li> |
||
juriad Profil |
#2 · Zasláno: 9. 9. 2015, 14:35:04
To proto, že v li na 4. řádku musíš vypast v připadě vnořeného pole klíč a ne hodnotu. Trochu jsem to zobecnil:
function printRecursiveArray($pole) { echo "<ul>\n"; foreach ($pole as $key => $value) { echo "<li>"; if (is_array($value)) { echo $key, "\n"; printRecursiveArray($value); } else { echo $value; } echo "</li>\n"; } echo "</ul>\n"; } printRecursiveArray($pole); |
||
pole Profil * |
#3 · Zasláno: 9. 9. 2015, 16:34:49
no ono je to trošku složitější ten kód, sem jsem ho napsal zjednodušeně, nakopl jsi mě správným směrem, ale stejně nedokážu udělat to, co chci
kód vypadá takto: <ul> <?php $pole=array('odkaz'=>array('položka','položka','položka','položka'),'odkaz'=>array('položka','položka'),'odkaz','odkaz','odkaz'=>array('položka','položka','položka'),'odkaz','odkaz'=>array('položka','položka','položka'),'odkaz'=>array('položka','položka','položka'),'odkaz'=>array('položka','položka','položka')); foreach ($pole as $key=>$value) { if (is_array($value)) { echo '<div class="odkaz"><li><a href="">'.$key.'</a>'; echo '<ul>'; foreach ($value as $value) { echo '<li><a href="">'.$value.'</a></li>'; } echo '</ul></li></div>'; } else { echo '<div class="odkaz"><li><a href="">'.$value.'</a></li></div>'; } } ?> </ul> if u doplnit něco, aby to vypsalo všechny hodnoty
|
||
juriad Profil |
pole:
V seznamech nemá <div> co dělat. A kde chceš vzít ty adresy? To podle mě musíš změnit tu definici pole. To foreach ($value as $value) je přece blbost, proměnná se musí jmenovat jinak.
$menu = array( array('name' => 'jedna', 'submenu' => array( array('name' => 'a', 'href' => 'http://a/'), array('name' => 'b', 'href' => 'http://b/'), array('name' => 'c', 'href' => 'http://c/'), array('name' => 'd', 'href' => 'http://d/') ) ), array('name' => 'dva', 'href' => 'http://dva/'), array('name' => 'tri', 'href' => 'http://tri'), array('name' => 'ctyri', 'submenu' => array( array('name' => 'a', 'href' => 'http://a/'), array('name' => 'b', 'href' => 'http://b/') ) ) ); function printRecursiveArray($menu) { echo "<ul>\n"; foreach ($menu as $li) { echo "<li>"; if (isset($li['href'])) { echo "<a href=\"" . $li['href'] . "\">". $li['name'] . "</a>"; } else { echo "<span>". $li['name'] . "</span>"; } if (isset($li['submenu'])) { echo "\n"; printRecursiveArray($li['submenu']); } echo "</li>\n"; } echo "</ul>\n"; } printRecursiveArray($menu); |
||
tiso Profil |
#5 · Zasláno: 9. 9. 2015, 17:02:28
pole: tvoj i juriad-ov kód funguje, len musíš mať unikátne kľúče v tom poli, ty si ich v definícii prepisuješ:
$pole=array( 'odkaz'=>array('položka1','položka','položka','položka'),//toto pole bude postupne prepisane 'odkaz'=>array('položka2','položka'), 'odkaz',//0 'odkaz',//1 'odkaz'=>array('položka3','položka','položka'),//vsetkymi 'odkaz',//2 'odkaz'=>array('položka4','položka','položka'),//tu 'odkaz'=>array('položka5','položka','položka'),//dolu 'odkaz'=>array('položka6','položka','položka')//posledne zostane ); //vysledne pole: $pole=array( 'odkaz'=>array('položka6','položka','položka') 'odkaz',//0 'odkaz',//1 'odkaz',//2 ); |
||
pole Profil * |
#6 · Zasláno: 9. 9. 2015, 18:06:03
aha
ještě se zeptám: vyplatí se to vůbec dělat takto přes pole? já jsem to chtěl udělat, abych nemusel 9x kopírovat to stejný a aby byl kód přehlednější a kratší nelituji toho času, který jsem nad tím strávil, dost jsem se toho naučil :) juriad: „V seznamech nemá <div> co dělat.“ ok, zkusím to ještě pořešit |
||
Alphard Profil |
#7 · Zasláno: 9. 9. 2015, 19:02:38
pole:
„vyplatí se to vůbec dělat takto přes pole?“ Máte oddělenou obsahovou složku (názvy, odkazy) od vzhledové, to je výhoda, je to obecnější. Už chybí jen krok k tomu, aby se načítalo dynamické menu z databáze. Jestli to má smysl pro konkrétní web musíte vědět sám, ale je dobré to umět. |
||
pole Profil * |
#8 · Zasláno: 10. 9. 2015, 12:54:13
díky všem vašim radám to funguje suprově a kód vypadá takto:
<ul> <?php $menu = array(array('name' => 'odkaz 1', 'href' => '', 'submenu' => array(array('name' => 'položka a', 'href' => ''), array('name' => 'položka b', 'href' => ''), array('name' => 'položka c', 'href' => ''), array('name' => 'položka d', 'href' => '') ) ), array('name' => 'odkaz 2', 'href' => ''), array('name' => 'odkaz 3', 'href' => ''), array('name' => 'odkaz 4', 'href' => '', 'submenu' => array(array('name' => 'položka a', 'href' => ''), array('name' => 'položka b', 'href' => '') ) ) ); foreach ($menu as $li) { echo "<li class='odkaz'><a href=" . $li['href'] . ">". $li['name'] . "</a>"; if (isset($li['submenu'])) { echo "<ul>"; foreach ($li['submenu'] as $submenu) { echo "<a href=" . $submenu['href'] . "><li>".$submenu['name']."</li></a>"; } echo "</ul>"; } echo "</li>"; } ?> </ul> <li class="odkaz></li> byl odkaz? kód: <li class='odkaz'><a href=''>odkaz 1<a><ul>....</ul></li> a toto <a href=''><li class='odkaz'>odkaz 1<ul>....</ul></li><a> samozřejmě nejde
|
||
juriad Profil |
#9 · Zasláno: 10. 9. 2015, 14:59:08
pole:
Budeš Mít <li ...><a ...>Odkaz</a>...</li> a to trošku nastyluješ, nejspíš něco jako:
#menu li>a { display: block; } |
||
pole Profil * |
#10 · Zasláno: 10. 9. 2015, 16:18:54
ajo, že mě to nenapadlo:
margin u li jsem vyměnil za padding u a a už to je, jak chci
děkuji |
||
Časová prodleva: 9 let
|
0