Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: Honza 02. 03. 2017, 14:44:43
-
Ahoj, snažím se vytvořit a vypsat pole v php. V manuálu jsem zjistil, že můžu vytvořit pole třeba takto
$pole = [ "windows" => "Windows" , "linux" => "Linux" , "apple" => "Apple" ] ;
a následně ho můžu celé vypsat třeba takto
foreach ($array as $key=>$value){
echo $key."<br>";
echo $value."<br>";
}
Jenže už jsem nenašel/nepochopil, jak bych mohl vypsat pole, které by ještě mělo u každé položky další položky. Nevím jak to přesně napsat, zkusím raději napsat jak by měl vypadat výsledek.
<a href="/windows">Windows</a>
<a href="/windows/windows10">+ Windows10</a>
<a href="/windows/windows7">+ Windows7</a>
<a href="/windows/windowsXP">+ WindowsXP</a>
<a href="/linux">Linux</a>
<a href="/linux/debian">+ Debian</a>
<a href="/linux/debian8">+ + Debian8</a>
<a href="/linux/debian7">+ + Debian7</a>
<a href="/linux/ubuntu">+ Ubuntu</a>
<a href="/linux/opensuse">+ OpenSuse</a>
<a href="/apple">Apple</a>
poradil by mi někdo, jak vytvořit a vypsat takové pole? Děkuji za pomoc.
-
$strom = [
"windows" => ["Windows 95", "Windows XP", "Windows 10"],
"linux" => ["Debian", "Fedora", "CentOs"],
"apple" => "Apple",
] ;
-
No takové pole umím už taky vytvořít, jenže já se ptal na něco jiného. ???
-
No takové pole umím už taky vytvořít, jenže já se ptal na něco jiného. ???
Vnořený cykly.
-
Ak by to malo byť pole, tak napríklad:
$pole = [ "windows" => ["Windows" , [ "windows7" => "Windows 7",
"windows8" => "Windows 8",
"windows10" => "Windows 10" ]],
"linux" => ["Linux", [ "gentoo" => "Gentoo",
"debian8" => "Debian 8",
"ubuntu" => "Ubuntu 16.04LTS" ]],
"apple" => ["Apple", ["apple" => "Apple"]] ;
Výpis položiek by mohol vyzerať napríklad takto:
foreach ($pole as $key => $value){
echo $key . "<br>";
echo $value[0] . "<br>";
foreach ($value[1] as $key1 => $value1){
echo $key1 . "<br>";
echo $value1 . "<br>";
}
alebo aj takto:
foreach ($pole as $key => $value){
echo "<a href=\"/{$key}\">{$value[0]}</a>";
foreach ($value[1] as $key1 => $value1){
echo " <a href=\"/{$key}/{$key1}\">+ + {$value1}</a>";
}
Celé je to samozrejme blbosť a v praxi by som to určite urobil úplne inak, ale keď to musí byť pole tak teda pole.
Píšem to z hlavy, pre takúto prkotinu sa mi nechce vstať z postele a ísť k počítaču, takže je to bez záruky.
-
Mno .. pokud ti jde jen o ten vypis tak je tam print_r
-
Jo a pokud to chces ladovat do (x)html, tak je nejlepsi na to pouzivat xml funcionalitu ... z pole to zkonvertujes snadno. Navic mas nastroj na filtrovani/upravy/razeni/... .
-
Typický příklad pro použití návrhového vzoru Visitor. Prvky budou instance různých tříd, nějaká sada prvků (kontejner/pole) atd. Potom může mít každý prvek vlastní reprezentaci, pole projdu cyklem, prvek zobrazím třeba jako odkaz, a nezajímá mě, jakou strukturu to pole bude mít.
Takhle natvrdo navržený vnořený cyklus závisí na struktuře, jako to pole má, což není správně.
-
Ak by to malo byť pole, tak napríklad:
$pole = [ "windows" => ["Windows" , [ "windows7" => "Windows 7",
"windows8" => "Windows 8",
"windows10" => "Windows 10" ]],
"linux" => ["Linux", [ "gentoo" => "Gentoo",
"debian8" => "Debian 8",
"ubuntu" => "Ubuntu 16.04LTS" ]],
"apple" => ["Apple", ["apple" => "Apple"]] ;
Výpis položiek by mohol vyzerať napríklad takto:
foreach ($pole as $key => $value){
echo $key . "<br>";
echo $value[0] . "<br>";
foreach ($value[1] as $key1 => $value1){
echo $key1 . "<br>";
echo $value1 . "<br>";
}
alebo aj takto:
foreach ($pole as $key => $value){
echo "<a href=\"/{$key}\">{$value[0]}</a>";
foreach ($value[1] as $key1 => $value1){
echo " <a href=\"/{$key}/{$key1}\">+ + {$value1}</a>";
}
Celé je to samozrejme blbosť a v praxi by som to určite urobil úplne inak, ale keď to musí byť pole tak teda pole.
Píšem to z hlavy, pre takúto prkotinu sa mi nechce vstať z postele a ísť k počítaču, takže je to bez záruky.
Díky moc, tohle dělá o co týden hledám :-(
Ty jo, že prkotina, a z postele zzsss ;D ;D
A v čem to ještě může být když ne v poli a db používat zatím nechci?
A když je to tak jednoduché pro tebe, nešlo by to malinkoo poopravit aby tam nebylo žádné omezení? Myslím tím, že teď to vypisuje pouze 2 úrovně. Díky moc za pomoc.
-
No takové pole umím už taky vytvořít, jenže já se ptal na něco jiného. ???
Vypsat to můžeš rekurzí.
-
poradil by mi někdo, jak vytvořit a vypsat takové pole? Děkuji za pomoc.
Buď již zmíněný print_r (http://php.net/manual/en/function.print-r.php) nebo třeba var_dump (http://php.net/manual/en/function.var-dump.php)
-
A když je to tak jednoduché pro tebe, nešlo by to malinkoo poopravit aby tam nebylo žádné omezení? Myslím tím, že teď to vypisuje pouze 2 úrovně. Díky moc za pomoc.
V php som už roky nič nenapísal, ale ešte si niečo pamätám.
Samozrejme že sa to dá: $pole = [ "windows" => ["Windows" , [ "windows7" => "Windows 7",
"windows8" => "Windows 8",
"windows10" => "Windows 10" ]],
"linux" => ["Linux", [ "gentoo" => "Gentoo",
"debian" => ["Debian",["debian8" => "Debian 8",
"debian9" => "Debian 9"]],
"ubuntu" => "Ubuntu 16.04LTS" ]],
"apple" => "Apple"] ;
function menu(string $path, array $pole) {
foreach ($pole as $key => $value){
$newPath = $path . $key . "/";
if (is_array($value)) {
echo "<a href=\"/{$newPath}\">{$value[0]}</a><br>\n";
menu($newPath, $value[1]);
} else {
echo "<a href=\"/{$newPath}\">{$value}</a><br>\n";
}
}
}
menu("", $pole);
S rekurzívnou funkciou môže byť hĺbka vnorenia ľubovoľná, od 1..
Toto je výsledok:
<a href="/windows/">Windows</a><br>
<a href="/windows/windows7/">Windows 7</a><br>
<a href="/windows/windows8/">Windows 8</a><br>
<a href="/windows/windows10/">Windows 10</a><br>
<a href="/linux/">Linux</a><br>
<a href="/linux/gentoo/">Gentoo</a><br>
<a href="/linux/debian/">Debian</a><br>
<a href="/linux/debian/debian8/">Debian 8</a><br>
<a href="/linux/debian/debian9/">Debian 9</a><br>
<a href="/linux/ubuntu/">Ubuntu 16.04LTS</a><br>
<a href="/apple/">Apple</a><br>
Dnes sa už cítim lepšie, beriem ešte antibiotiká, ale vstal som z postele a zapol PC. ;)
Samozrejme by to ešte chcelo vnorené href posunúť doprava, aby to malo trošku fazónu, ale to už je tak jednoduché, že sa mi to nechce písať.