Liste mit zwei Ebenen für Menüausgeben

Liste mit zwei Ebenen für Menüausgeben

am 03.04.2008 21:34:49 von Tom Sousa

Hallo,

ich bastele mir ein Menü mit zwei Ebenen, das mittels PHP als Liste
ausgegeben werden soll. Der aktive Menüpunkt bekommt für die Formatierung
eine ID. Das funktioniert gut mit einer einfachen Liste. Hier der bisherige
Code:

> > $url = array(
> "/Punkt1.php"=>"Punkt1",
> "/Punkt2.php"=>"Punkt2",
> "/Punkt3.php"=>"Punkt3",
> "/Punkt4.php"=>"Punkt4");
> ?>
>



Das ergibt dann folgende Liste:

- Punkt1
- Punkt2
- Punkt3
- Punkt4

Da ich unerfahren in PHP bin, finde ich keinen Ansatz eine Menüliste mit
zwei Ebenen zu erstellen. Sie müsste dann - unter Beibehaltung der
ID-Zuordnung des aktuellen Punktes - so ausgegeben werden:

- Punkt1
- Punkt1.1
- Punkt1.2
- Punkt2
- Punkt2.1
- Punkt2.2
- Punkt3
- Punkt3.1
- Punkt3.2
- Punkt4
- Punkt4.1
- Punkt4.2

Kann mir jemand helfen?

Vielen Dank im Voraus.

Tom

Re: Liste mit zwei Ebenen für Menü ausgeben

am 03.04.2008 22:35:37 von Markus Deckmann

Hi Tom,

> Da ich unerfahren in PHP bin, finde ich keinen Ansatz eine Menüliste mit
> zwei Ebenen zu erstellen. Sie müsste dann - unter Beibehaltung der
> ID-Zuordnung des aktuellen Punktes - so ausgegeben werden:
>
> - Punkt1
> - Punkt1.1
> - Punkt1.2
> - Punkt2
> - Punkt2.1
> - Punkt2.2
> - Punkt3
> - Punkt3.1
> - Punkt3.2
> - Punkt4
> - Punkt4.1
> - Punkt4.2
>
> Kann mir jemand helfen?

Na mal schauen. ;-) Ich würde bei deinem Anwendungsfall auf ein
mehrdimensionales Array setzen in dem ich meine Menüstruktur hinterlege.
Allerdings wäre es hier jetzt IMHO auch noch wichtig zu wissen ob die
Menüpunkte "Punkt 1", "Punkt 2", usw. eigene Seiten darstellen oder
lediglich Container für die unterliegenden Seiten und erst eine Seite
angezeigt wird wenn eine Unterseite aufgerufen wird.

Ciao Markus

Re: Liste mit zwei Ebenen für Menüausgeben

am 04.04.2008 09:39:13 von David Fuhr

Markus Deckmann wrote in
news:ft3f2e$thv$4@arouter.asamnet.de:

> Hi Tom,
>
>> Da ich unerfahren in PHP bin, finde ich keinen Ansatz eine Menüliste
>> mit zwei Ebenen zu erstellen. Sie müsste dann - unter Beibehaltung
>> der ID-Zuordnung des aktuellen Punktes - so ausgegeben werden:
>>
>> - Punkt1
>> - Punkt1.1
>> - Punkt1.2
>> - Punkt2
>> - Punkt2.1
>> - Punkt2.2
>> - Punkt3
>> - Punkt3.1
>> - Punkt3.2
>> - Punkt4
>> - Punkt4.1
>> - Punkt4.2
>>
>> Kann mir jemand helfen?
>
> Na mal schauen. ;-) Ich würde bei deinem Anwendungsfall auf ein
> mehrdimensionales Array setzen in dem ich meine Menüstruktur
> hinterlege.

Wenn's wirklich nur auf 2 Ebenen begrenzt bleibt kommst mit Schleifen
hin, aber wenn's beliebig viele Ebenen sein sollen ist Rekursion dein
Freund:

function foo($bar) {
echo $bar.name;
if($bar.child) {
foo($bar.child);
}
}

$bar = array(); // das ist dein multidimensionaler array
foor($bar)

Für OOP geht es natürlich analog...

Gruß
David

Re: Liste mit zwei Ebenen für Menüausgeben

am 04.04.2008 14:25:19 von Frank Arthur

Tom Sousa schrieb:

> [...]
>>



Das ergibt ungültiges HTML.


zwei öffnende und ein schließendes ul.

Re: Liste mit zwei Ebenen für Menüausgeben

am 04.04.2008 14:51:54 von Tom Sousa

Am 4 Apr 2008 12:25:19 GMT schrieb Frank Arthur:

> Tom Sousa schrieb:
>
>> [...]
>>>


>
> Das ergibt ungültiges HTML.
>
>
> zwei öffnende und ein schließendes ul.

Stimmt, das hast du gut beobachtet. Das schliessende ist beim
kopieren des Codes vergessen worden.

Gruß

Re: Liste mit zwei Ebenen für Menü ausgeben

am 04.04.2008 15:11:26 von usenet

Tom Sousa wrote:
> Stimmt, das hast du gut beobachtet. Das schliessende ist beim
> kopieren des Codes vergessen worden.

Hast du eigentlich gelesen, was Frank dir gesagt hat?


Gruß,
Habbo

Re: Liste mit zwei Ebenen für Menü ausgeben

am 04.04.2008 15:18:03 von Claus Reibenstein

Tom Sousa schrieb:

> Am 4 Apr 2008 12:25:19 GMT schrieb Frank Arthur:
>
>> zwei öffnende und ein schließendes ul.
¯¯

> Stimmt, das hast du gut beobachtet. Das schliessende ist beim
¯¯¯¯¯¯

Weißt Du eigentlich, was Du da machst? ;-)

Gruß. Claus

Re: Liste mit zwei Ebenen für Menü ausgeben

am 04.04.2008 17:36:05 von Tom Sousa

Am Thu, 03 Apr 2008 22:35:37 +0200 schrieb Markus Deckmann:

>> Kann mir jemand helfen?
>
> Na mal schauen. ;-) Ich würde bei deinem Anwendungsfall auf ein
> mehrdimensionales Array setzen in dem ich meine Menüstruktur hinterlege.
> Allerdings wäre es hier jetzt IMHO auch noch wichtig zu wissen ob die
> Menüpunkte "Punkt 1", "Punkt 2", usw. eigene Seiten darstellen oder
> lediglich Container für die unterliegenden Seiten und erst eine Seite
> angezeigt wird wenn eine Unterseite aufgerufen wird.

"Mehrdimensionales Array" hört sich gut und kompliziert an.

Im konkreten Fall soll es ein Menü sein, in dem die Menüpunkte erster Ebene
(also Punkt1, Punkt2) auch eigene Seiten darstellen.

> Ciao Markus

Bis dann...

Tom

Re: Liste mit zwei Ebenen für Menü ausgeben

am 04.04.2008 17:43:01 von Tom Sousa

Am Fri, 04 Apr 2008 15:11:26 +0200 schrieb Jan Habbo BrŸüning:

> Tom Sousa wrote:
>> Stimmt, das hast du gut beobachtet. Das schliessende ist beim
>> kopieren des Codes vergessen worden.
>
> Hast du eigentlich gelesen, was Frank dir gesagt hat?

Hab mich vertan, so ist es gedacht.



Grüße

Re: Liste mit zwei Ebenen für Menü ausgeben

am 04.04.2008 17:43:51 von Tom Sousa

Am Fri, 04 Apr 2008 15:18:03 +0200 schrieb Claus Reibenstein:

> Tom Sousa schrieb:
>
>> Am 4 Apr 2008 12:25:19 GMT schrieb Frank Arthur:
>>
>>> zwei öffnende und ein schließendes ul.
> ¯¯
>
>> Stimmt, das hast du gut beobachtet. Das schliessende ist beim
> ¯¯¯¯¯¯
> Weißt Du eigentlich, was Du da machst? ;-)
>
> Gruß. Claus

Ja, ich hab mich nur vertan. So ist es gedacht:



Grüße

Re: Liste mit zwei Ebenen für Menü ausgeben

am 04.04.2008 17:48:42 von Christoph Herrmann

Tom Sousa schrieb:
> "Mehrdimensionales Array" hört sich gut und kompliziert an.
>
> Im konkreten Fall soll es ein Menü sein, in dem die Menüpunkte erster Ebene
> (also Punkt1, Punkt2) auch eigene Seiten darstellen.

$array =
{
'gruppe1' => array
{
'seite1',
'seite2
},
'gruppe2' => array
{
'seite1',
'seite2
}
}

Mehrdimensional heißt einfach, du hast ein Array mit weiteren Arrays als
Elemente. Dadurch lässt sich sehr schön eine Baumstruktur erzeugen, die
du ja auch im Menü dann abbilden willst.

Hier zum lesen:
http://www.php.net/manual/de/language.types.array.php

echo '

';

"foreach" würde ich einer while Schleife immer vorziehen beim
durchlaufen einer Liste, denn dafür ist die Kontrollstruktur auch
gedacht. Ist einfacher und schneller als eine "while" Schleife.

Hier zum lesen:
http://www.php.net/manual/de/control-structures.foreach.php

Des weiteren würde ich Interpolation empfehlen je nach eigenem Geschmack
(ich nutze es nicht, sehe es aber mittlerweile auch als sinnvoll an):
http://www.php.net/manual/de/language.types.string.php#langu age.types.string.parsing

Der Rest sollte eigentlich verständlich genug sein.

--
Mit freundlichen Grüßen,
Christoph Herrmann

http://dragonprojects.de/

Re: Liste mit zwei Ebenen für Menü ausgeben

am 04.04.2008 19:48:21 von Claus Reibenstein

Tom Sousa schrieb:

> "Mehrdimensionales Array" hört sich gut und kompliziert an.

Mehrdimensionale Arrays gibt es in PHP nicht. Gemeint sind Arrays, deren
Elemente wiederum aus Arrays bestehen ("Geschachteltes Array" wäre wohl
treffender). Damit lassen sich komplexe Baumstrukturen recht gut
abbilden, und eine Menüstruktur ist letztendlich nichts anderes.

Kompliziert - na ja, ein bisschen schon ;-)

Gruß. Claus

Re: Liste mit zwei Ebenen für Menü ausgeben

am 04.04.2008 20:00:55 von Michael Fesser

..oO(Claus Reibenstein)

>Tom Sousa schrieb:
>
>> "Mehrdimensionales Array" hört sich gut und kompliziert an.
>
>Mehrdimensionale Arrays gibt es in PHP nicht. Gemeint sind Arrays, deren
>Elemente wiederum aus Arrays bestehen ("Geschachteltes Array" wäre wohl
>treffender).

Was hast Du gegen "mehrdimensional"? Ob ich nun schreibe

$element = $array[1][2][3];

oder wie in manch anderen Sprachen (sinngemäß)

$element = $array[1, 2, 3];

ist lediglich eine Syntaxfrage. "Mehrdimensional" heißt für mich einfach
ein Array von Arrays.

Micha

Re: Liste mit zwei Ebenen für Menü ausgeben

am 04.04.2008 20:50:58 von Wolfgang Fellger

Michael Fesser schrieb:

>Was hast Du gegen "mehrdimensional"? Ob ich nun schreibe
> $element = $array[1][2][3];
>oder wie in manch anderen Sprachen (sinngemäß)
> $element = $array[1, 2, 3];
>ist lediglich eine Syntaxfrage.

Ada kennt beides (nicht nur als alternierende Syntax, sondern tatsächlich als
anderer Typ). Ist allerdings auch die einzige mir bekannte Sprache die das so
handhabt ;-)

--
Wolfgang Fellger

Re: Liste mit zwei Ebenen für Menü ausgeben

am 04.04.2008 21:35:07 von Claus Reibenstein

Michael Fesser schrieb:

> ..oO(Claus Reibenstein)
>
>> Tom Sousa schrieb:
>>
>>> "Mehrdimensionales Array" hört sich gut und kompliziert an.
>>
>> Mehrdimensionale Arrays gibt es in PHP nicht. Gemeint sind Arrays, deren
>> Elemente wiederum aus Arrays bestehen ("Geschachteltes Array" wäre wohl
>> treffender).
>
> Was hast Du gegen "mehrdimensional"?

Im Zusammenhang mit PHP eine ganze Menge.

> Ob ich nun schreibe
>
> $element = $array[1][2][3];
>
> oder wie in manch anderen Sprachen (sinngemäß)
>
> $element = $array[1, 2, 3];
>
> ist lediglich eine Syntaxfrage.

Es ist eine Frage der Begrifflichkeit. Ein mehrdimensionales Array ist
nun mal etwas ganz anderes als ein Array aus Arrays.

Man kann zwar mehrdimensionale Arrays mit Hilfe von geschachtelten
Arrays simulieren (und tut das in der Praxis auch). Dies ändert aber
nichts daran, dass PHP keine echten mehrdimensionalen Arrays kennt.

Schau Dir mal z.B. Fortran an. Dort hast Du echte mehrdimensionale
Arrays. Geschachtelte Arrays wie in PHP wirst Du dort hingegen
vergeblich suchen.

> "Mehrdimensional" heißt für mich einfach
> ein Array von Arrays.

Dann hast Du definitiv eine andere (und IMHO falsche) Begriffswelt als ich.

Gruß. Claus

Re: Liste mit zwei Ebenen für Menü ausgeben

am 04.04.2008 22:04:27 von Markus Deckmann

Hi Claus,

> Es ist eine Frage der Begrifflichkeit. Ein mehrdimensionales Array ist
> nun mal etwas ganz anderes als ein Array aus Arrays.

Ok, wenn man sich an der Begrifflichkeit aufhängen will ist das ok,
welche wirkliche praktische Folge hat ein Verwechseln dieser
Begrifflichkeiten deiner Meinung?


> Man kann zwar mehrdimensionale Arrays mit Hilfe von geschachtelten
> Arrays simulieren (und tut das in der Praxis auch). Dies ändert aber
> nichts daran, dass PHP keine echten mehrdimensionalen Arrays kennt.

Siehe oben...auch hier die gleiche Frage. Macht es außer der
Begrifflichkeit, noch dazu wenn sie eh meist so simuliert wird steht sie
in der jeweiligten Sprache nicht zur Verfügung, wirklich einen Unterschied?


>> "Mehrdimensional" heißt für mich einfach
>> ein Array von Arrays.
>
> Dann hast Du definitiv eine andere (und IMHO falsche) Begriffswelt als ich.

Macht die sich denn auch in der Praxis bemerkbar oder nur in deinem Kopf
und damit in der Begrifflichkeit.

Für mich bedeutet "mehrdimensional" erst mal nur die abstrakte Aussage
das ich eine Liste benötige die mehrdimensional ist. Die Umsetzung in
einer Programmiersprache ist in dieser Begrifflichkeit noch gar nicht
mit beachtet. Wie dieses "mehrdimensional" dann in der jeweiligen
Sprache umgesetzt wird, in PHP halt als Array mit Arrays und in Fortran
scheinbar als wirklich mehrdimensional, ist doch dann eine ganz andere
Frage.

Sicher könnte man jetzt, IMHO sehr einschränkend für das Denken,
bemerken das wir uns hier in einer PHP-Newsgroup befinden und hier der
Unterschied gefälligst gemacht werden sollte da PHP keine wirklich
mehrdimensionale Arrays bietet. Allerdings sehe ich diese Newsgroup, wie
auch alle anderen für Programmiersprachen, in erster Linie als eine
Programmier-Newsgroup. Sicher sollte man in den jeweiligen Newsgroups an
die jeweilige Sprach halten und nicht in C++ nach PHP fragen.

Allerdings halte ich es für eine sehr, sehr, sehr wichtige Fähigkeit
eines angehenden Software-Entwicklers abstrakt und unabhängig von der
Programmiersprache ein Problem logisch umsetzen zu können. Und als
angehenden Software-Entwickler erachte ich den Ursprungsposter aufgrund
der Art seiner Fragestellung. Für diese Ebene der Problemlösung ist
allerdings eine abstrakte Denkweise von nöten und nicht eine so
einschränkende das ich je nachdem welches Problem ich löse einmal in PHP
und einmal in C++ oder Java denke, sondern das ich abstrakt denken kann.
Und dann ist es nunmal egal ob PHP mehrdimensionale Arrays bietet oder
nicht.

Ciao Markus

Re: Liste mit zwei Ebenen für Menü ausgeben

am 04.04.2008 23:03:58 von Claus Reibenstein

Markus Deckmann schrieb:

> Hi Claus,
>
>> Es ist eine Frage der Begrifflichkeit. Ein mehrdimensionales Array ist
>> nun mal etwas ganz anderes als ein Array aus Arrays.
>
> Ok, wenn man sich an der Begrifflichkeit aufhängen will ist das ok,
> welche wirkliche praktische Folge hat ein Verwechseln dieser
> Begrifflichkeiten deiner Meinung?

Welche Folgen hat es, die Begriffe "Tisch" und "Stuhl" zu verwechseln?

Es sind zwei grundsätzlich verschiedene Dinge, die man in der Praxis
auseinanderhalten sollte. Spätestens dann, wenn man in einem Team an
einem Problem arbeitet, kann eine solche Verwechlung katastrophale
Folgen haben. Nach 30 Jahren Software-Entwicklung hat man so seine
Erfahrungen.

> Für mich bedeutet "mehrdimensional" erst mal nur die abstrakte Aussage

Es ging nicht um irgendeine "abstrakte Aussage". Meine Anmerkung
"Mehrdimensionale Arrays gibt es in PHP nicht" bezog sich auf PHP.

Gruß. Claus

Re: Liste mit zwei Ebenen für Menü ausgeben

am 04.04.2008 23:24:44 von Markus Deckmann

Hi Claus,

> Es sind zwei grundsätzlich verschiedene Dinge, die man in der Praxis
> auseinanderhalten sollte. Spätestens dann, wenn man in einem Team an
> einem Problem arbeitet, kann eine solche Verwechlung katastrophale
> Folgen haben. Nach 30 Jahren Software-Entwicklung hat man so seine
> Erfahrungen.

Wenn man in einem Team an einem Problem arbeitet sollte man das Problem
erst mal auf abstrakter Ebene lösen bevor man sich mit der Umsetzung in
die jeweilige Programmiersprache beschäftigt.

Außerdem bleibst du leider nach wie vor die Antwort auf meine Frage
schuldig welche wirklichen Folgen sowas haben sollte. Wenn das Team
natürlich gleich in PHP denkt dann macht es einen Unterschied und kann
zu Problemen führen. Wenn das Problem auf abstrakter Ebene angegangen
wird, was IMHO profesionelle Software-Entwicklung darstellt, dann ist
diese Unterscheidung unsinnig. Also lass mal bitte etwas raus von deiner
Erfahrung...ich kann zwar keine 30 Jahre Erfahrung vorweisen, aber auf
12-15 komme ich inzwischen auch schon und kann es ehrlich gesagt nicht
so nachvollziehen. Du bleibst wie gesagt die Antwort allerdings auch
lapidar mit der Bemerkung "Nach 30 Jahren Software-Entwicklung hat man
so seine Erfahrungen" schuldig.

Und sicher hat die Verwechslung zwischen "Tisch" und "Stuhl" erhebliche
Folgen, abstrakt gesehen handelt es sich bei beiden um ein "Inventar"
oder "Möbelstück" oder ... Wenn das Problem keine Unterscheidung
zwischen Tisch und Stuhl benötigt um lösbar zu sein, sollte man diese
IMHO auch nicht machen. Das sorgt in Teams nämlich dann für Verwirrung.


> Es ging nicht um irgendeine "abstrakte Aussage". Meine Anmerkung
> "Mehrdimensionale Arrays gibt es in PHP nicht" bezog sich auf PHP.

Deine Aussage habe ich auch gar nicht angegriffen, da es sich beim
Ursprungsposter allerdings scheinbar um einen Anfänger der
professionellen Software-Entwicklung handelt sollte er gleich von Anfang
lernen erst mal abstrakt die Sachen anzugehen und nur da runterzubrechen
wo es wirklich nötig ist und nicht in irgendeiner Programmiersprache
zu denken.

Dies führt nämlich genau zu solchen Programmieren deren Arbeit ich nach
etlichen versauten Monaten/Jahren/Projekten dann in mühseeliger
Kleinarbeit rekonstruieren und ausbessern darf, weil sie zwar perfekt
die Sprache beherschen, leider Gottes von der Materie Programmieren
jedoch keine Ahnung haben.

Weiterhin ist es kontraproduktiv für den "Lehrling" der Sprache, da er
bei einer auf die Programmiersprache-orientierte Lernweise bei einer
neuen Sprache wieder beim Anfang anfangen muss, weil er leider gar nicht
überblickt das das Programmieren sich nicht ändert, sondern lediglich
die Syntax.

Und damit wären wir dann bei deinem Satz. Programmiertechnisch ist es
egal ob ich "Mehrdimensional", "Liste-in-Liste" oder "verschachteltes
Array" sage. Die Logik hinter diesen Begrifflichkeiten ist auf dieser
Ebene noch genau die selbe. Und ich traue mich fast wetten wenn ich egal
welchem Entwickler diese 3 Begriffe gebe und ihn bitte mir in
Pseudo-Code ein Bild dessen zu schreiben was er darunter versteht,
bekomme ich von allen das selbe Ergebnis. Erst in der Syntax der
jeweiligen Sprache, in unserem Beispiel PHP, ergibt sich der sprachliche
Unterschied. Die Syntax zählt allerdings dann auch schon zur Umsetzung.
Und hier haben wir eine andere Frage, nämlich die "Wie setze ich mein
logisch gelöstes Problem jetzt in diese oder jene Programmiersprache
um?". Ab diesem Punkt kann man sich dann unterhalten ob es Sinn macht
die Begrifflichkeiten wirklich zu unterscheiden, ich hab ja leider immer
noch keine Ahnung worin du die Gefahr in diesem Beispiel bei einer
Verwechslung siehst, oder ob es sinnvoller ist sich weiter auf der
abstrakten Ebene zu unterhalten.

Ciao Markus

Re: Liste mit zwei Ebenen für Menü ausgeben

am 04.04.2008 23:47:21 von Niels Braczek

Claus Reibenstein schrieb:
> Michael Fesser schrieb:

>> Was hast Du gegen "mehrdimensional"?

> Es ist eine Frage der Begrifflichkeit. Ein mehrdimensionales Array ist
> nun mal etwas ganz anderes als ein Array aus Arrays.

Nein, hier nicht. Hier ist es *genau* das.

> Schau Dir mal z.B. Fortran an. Dort hast Du echte mehrdimensionale
> Arrays. Geschachtelte Arrays wie in PHP wirst Du dort hingegen
> vergeblich suchen.

Das sind Matrizen.

>> "Mehrdimensional" heißt für mich einfach
>> ein Array von Arrays.
>=20
> Dann hast Du definitiv eine andere (und IMHO falsche) Begriffswelt als =
ich.

In der PHP-Welt ist das aber nun mal die korrekte Begriffsbildung. Muss
dir nicht gefallen, ist aber so.

MfG
Niels

--=20
| http://www.kolleg.de =B7 Das Portal der Kollegs in Deutschland |
| http://www.bsds.de =B7 BSDS Braczek Software- und DatenSysteme |
| Webdesign =B7 Webhosting =B7 e-Commerce =B7 Joomla! Content Management =
|
------------------------------------------------------------ ------

Re: Liste mit zwei Ebenen für Menü ausgeben

am 04.04.2008 23:52:22 von Niels Braczek

Markus Deckmann schrieb:
> Hi Claus,
>=20
>> Es ist eine Frage der Begrifflichkeit. Ein mehrdimensionales Array ist=

>> nun mal etwas ganz anderes als ein Array aus Arrays.
>=20
> Ok, wenn man sich an der Begrifflichkeit aufhängen will ist das ok,=20
> welche wirkliche praktische Folge hat ein Verwechseln dieser=20
> Begrifflichkeiten deiner Meinung?

Du kannst dich bei einem Array von Arrays nicht auf die Existenz einer
betimmten Dimension an jeder Stelle verlassen. Beispiel:

$x =3D array(
array(
1, 2, 3
),
'foo',
array(
4, 5, 6
)
);

Zwar existieren $x[0][1] und $x[2][1], ein $x[1][0] zB. gibt es aber
nicht. Das meint Claus mit seinem Einwand.

MfG
Niels

--=20
| http://www.kolleg.de =B7 Das Portal der Kollegs in Deutschland |
| http://www.bsds.de =B7 BSDS Braczek Software- und DatenSysteme |
| Webdesign =B7 Webhosting =B7 e-Commerce =B7 Joomla! Content Management =
|
------------------------------------------------------------ ------

Re: Liste mit zwei Ebenen für Menü ausgeben

am 05.04.2008 00:19:00 von Niels Braczek

Niels 'Ingrid' Braczek schrieb:

> $x =3D array(
> array(
> 1, 2, 3
> ),
> 'foo',
> array(
> 4, 5, 6
> )
> );
>=20
> Zwar existieren $x[0][1] und $x[2][1], ein $x[1][0] zB. gibt es aber
> nicht.=20

Doch, gibt es, nämlich 'f'... Statt des Strings 'foo' sollte im Beispie=
l
oben besser eine (Integer-) Zahl angegeben werden. Dann hinkt das nicht
mehr.

MfG
Niels

--=20
| http://www.kolleg.de =B7 Das Portal der Kollegs in Deutschland |
| http://www.bsds.de =B7 BSDS Braczek Software- und DatenSysteme |
| Webdesign =B7 Webhosting =B7 e-Commerce =B7 Joomla! Content Management =
|
------------------------------------------------------------ ------

Re: Liste mit zwei Ebenen für Menü ausgeben

am 05.04.2008 01:48:36 von Markus Deckmann

Hi Niels,

> $x = array(
> array(
> 1, 2, 3
> ),
> 7,
> array(
> 4, 5, 6
> )
> );

Das ist meiner Meinung nach zwar ein funktionierendes, aber unter der
Begrifflichkeit "mehrdimensional" syntaktisch falsch definiertes Array.
Ich habe mir auch erlaubt das 'foo' durch eine Zahl auszutauschen so wie
du im nächsten Posting gesagt hast. IMHO müsste es so aussehen:

$x = array(
array(
1, 2, 3
),

array(
7
),

array(
4, 5, 6
)
)

Ein mehrdimensionales Array sollte auch einen einheitlichen Aufbau
haben, was dein Aufbau nicht ist, da er Arrays und einfache
Zeichenketten bzw. einzelne Zahlen als Elemente mischt. Das ist Äpfel
und Birnen zusammengeworfen. Wenn solch eine Konstellation vorkommt mus
auch die einzelne Zeichenkette als 1-elementiges Array definiert werden
um die grundlegende Struktur eines mehrdimensionalen Arrays nicht zu
verletzen. Das Beispiel das ich skizziert habe trifft es IMHO eher.

Ciao Markus

Re: Liste mit zwei Ebenen für Menü ausgeben

am 05.04.2008 01:57:10 von Markus Deckmann

Hi Niels,

> In der PHP-Welt ist das aber nun mal die korrekte Begriffsbildung. Muss
> dir nicht gefallen, ist aber so.

Korrekte Begriffsbildung? Wer hat jemals definiert was als korrekt gilt
und was nicht? So eindeutig wie du das jetzt hin stellst ist das nämlich
IMHO gar nicht definiert. Außerdem denke ich sollte man sich erst mal
dran machen ein "korrektes" Vokabular der Software-Entwicklung zu
beschreiben bevor man sich eine Stufe weiter runter in die jeweiligen
Sprachen begibt.

IMHO benötigen die meisten Problemstellungen bei genauerer Betrachtung
gar keine weitere Unterteilung auf Logik-Ebene. Lediglich die Syntax
unterscheidet sich von Programmiersprache zu Programmiersprache. Die
Logik die dadurch abgebildet wird bleibt immer die selbe, egal ob in
Java, PHP oder Fortran. Dadurch erübrigt sich IMHO auch die
Begriffsbildung extra für die PHP-Welt weil diese das Vokabular Ihres
Eltern-Elements nutzen können und wie bereits angemerkt bei den meisten
Problemstellungen auch gar kein anderes benötigen. Weitere Einteilungen
extra für die einzelnen Sprachen bzgl. der Begriffe zu bilden halte ich
da eher für den Kern des Übels für Missverständnisse bei der
Software-Entwicklung.

Ciao Markus

Re: Liste mit zwei Ebenen für Menü ausgeben

am 05.04.2008 03:00:13 von Niels Braczek

Markus Deckmann schrieb:

> Ein mehrdimensionales Array sollte auch einen einheitlichen Aufbau=20
> haben, was dein Aufbau nicht ist, da er Arrays und einfache=20
> Zeichenketten bzw. einzelne Zahlen als Elemente mischt. Das ist Äpfel=
=20
> und Birnen zusammengeworfen.

Das ist aber die Realität in PHP. Ich wollte nur veranschaulichen, was
Claus gemeint hat, die Bezeichnung "mehrdimensionales Array" sei
semantisch falsch. Mit etwas Fantasie könnte man so ein gemischtes Arra=
y
als "fraktal" mit einer gebrochenen Dimension ansehen...

MfG
Niels

--=20
| http://www.kolleg.de =B7 Das Portal der Kollegs in Deutschland |
| http://www.bsds.de =B7 BSDS Braczek Software- und DatenSysteme |
| Webdesign =B7 Webhosting =B7 e-Commerce =B7 Joomla! Content Management =
|
------------------------------------------------------------ ------

Re: Liste mit zwei Ebenen für Menü ausgeben

am 05.04.2008 03:09:45 von Markus Deckmann

Hi Niels,

> Das ist aber die Realität in PHP. Ich wollte nur veranschaulichen, was
> Claus gemeint hat, die Bezeichnung "mehrdimensionales Array" sei
> semantisch falsch. Mit etwas Fantasie könnte man so ein gemischtes Array
> als "fraktal" mit einer gebrochenen Dimension ansehen...

Sei mir nicht böse, aber mit genügend Fantasie ist es auch möglich solch
eine Liste als graue Katze mit rotem Schwanz und grüner Schnauze
anzusehen. Aber wir wollen hier Software entwickeln und nicht rum
fantasieren. Und zur professionellen Software-Entwicklung gehört eben
auch das Halten an verschiedene grundsätzliche Strukturen die einem das
Programmiererleben halt einfacher machen.

Ein Programmierer ist kein Künstler. Er sollte das Problem mit der ihm
zur Verfügung stehenden Programmiersprache möglichst gut lösen, dazu
zählt IMHO das solch ein "gemischtes" Array erst mal in eine ordentliche
Form überführt wird und dann eine Standard-Bearbeitungt erfolgt als das
künstlerisch wie sich die meisten halten erst mal eine
Verabeitungsroutine für die graue Katze zu entwickeln.

Ciao Markus

Re: Liste mit zwei Ebenen für Menü ausgeben

am 05.04.2008 03:18:19 von Niels Braczek

Markus Deckmann schrieb:
> Hi Niels,
>=20
>> In der PHP-Welt ist das aber nun mal die korrekte Begriffsbildung. Mus=
s
>> dir nicht gefallen, ist aber so.
>=20
> Korrekte Begriffsbildung? Wer hat jemals definiert was als korrekt gilt=
=20
> und was nicht?

Das Manual, u.a. hier: http://www.php.net/manual/en/ref.array.php.
Somit ist der Begriff innerhalb des PHP-Kontextes hinreichend definiert.

> So eindeutig wie du das jetzt hin stellst ist das nämlich=20
> IMHO gar nicht definiert. Außerdem denke ich sollte man sich erst mal=
=20
> dran machen ein "korrektes" Vokabular der Software-Entwicklung zu=20
> beschreiben bevor man sich eine Stufe weiter runter in die jeweiligen=20
> Sprachen begibt.

Auf der abstrakten Ebene sollte man von "Bäumen", "Mengen", "Vektoren"
und "Matrizen" sprechen. Diese Begriffe sind durch die Mathematik
eindeutig definiert. Schon der Begriff "Array" ist
implementationsspezifisch. Die meisten Arrays in PHP zB. sind gar keine
Arrays, sondern Hashtables.

> Dadurch erübrigt sich IMHO auch die=20
> Begriffsbildung extra für die PHP-Welt weil diese das Vokabular Ihres=
=20
> Eltern-Elements nutzen können und wie bereits angemerkt bei den meist=
en=20
> Problemstellungen auch gar kein anderes benötigen.

Völlig unabhängig davon, ob du theoretisch Recht hast oder nicht - di=
e
Terminologie in der PHP-Welt wird durch das PHP-Manual bestimmt - durch
nichts und niemanden sonst.

> Weitere Einteilungen=20
> extra für die einzelnen Sprachen bzgl. der Begriffe zu bilden halte i=
ch=20
> da eher für den Kern des Übels für Missverständnisse bei der=20
> Software-Entwicklung.

Natürlich muss man immer die Begrifflichkeiten abklären. Wenn ich an =
das
englische Wort "tag" denke, sehe ich HTML-Anweisungen vor mir; jemand
anderes vielleicht Grafitti-Kürzel. Erst aus dem Kontext wird klar, was=

gemeint ist. Mehrdimensionale Arrays in PHP sind eben schlicht Arrays,
die Arrays enthalten, also Bäume ebenso wie Matrizen.

MfG
Niels

--=20
| http://www.kolleg.de =B7 Das Portal der Kollegs in Deutschland |
| http://www.bsds.de =B7 BSDS Braczek Software- und DatenSysteme |
| Webdesign =B7 Webhosting =B7 e-Commerce =B7 Joomla! Content Management =
|
------------------------------------------------------------ ------

Re: Liste mit zwei Ebenen für Menü ausgeben

am 05.04.2008 03:26:34 von Niels Braczek

Markus Deckmann schrieb:

> Ein Programmierer ist kein Künstler. Er sollte das Problem mit der ih=
m=20
> zur Verfügung stehenden Programmiersprache möglichst gut lösen, d=
azu=20
> zählt IMHO das solch ein "gemischtes" Array erst mal in eine ordentli=
che=20
> Form überführt wird und dann eine Standard-Bearbeitungt erfolgt

Die "ordentliche Form" ist im genannten Fall ein Baum, eine Matrix oder
gar eine Menge von Elementen und Mengen. Alle diese Formen sind
"ordentlich", alle diese Formen werden in PHP durch ein
mehrdimensionales Array abgebildet.

MfG
Niels

--=20
| http://www.kolleg.de =B7 Das Portal der Kollegs in Deutschland |
| http://www.bsds.de =B7 BSDS Braczek Software- und DatenSysteme |
| Webdesign =B7 Webhosting =B7 e-Commerce =B7 Joomla! Content Management =
|
------------------------------------------------------------ ------

Re: Liste mit zwei Ebenen für Menü ausgeben

am 05.04.2008 11:36:50 von Markus Deckmann

Hi Niels,

> Die "ordentliche Form" ist im genannten Fall ein Baum, eine Matrix oder
> gar eine Menge von Elementen und Mengen. Alle diese Formen sind
> "ordentlich", alle diese Formen werden in PHP durch ein
> mehrdimensionales Array abgebildet.

Aber nur weil ich bspw. die Menge von Elementen UND Mengen in der
Programmiersprache abbilden KANN heißt doch noch nicht zwangsläufig das
ich sie auch so abbilden SOLLTE und MUSS. Allein über die Vielfalt der
Möglichkeiten der Sprache ergeben sich doch schon rein logisch etliche
Strukturen die zwar möglich aber nicht sinnvoll sind. Daher mein
Vorschlag das ganze erst mal in eine "ordentliche" Form zu überführen.
Damit meinte ich eigentlich nur eine einheitliche Form und keine
gemischte Sachen wie eine Menge mit Elementen und Mengen.

Ciao Markus

Re: Liste mit zwei Ebenen für Menü ausgeben

am 05.04.2008 11:50:56 von Markus Deckmann

Hi Niels,

> Das Manual, u.a. hier: http://www.php.net/manual/en/ref.array.php.
> Somit ist der Begriff innerhalb des PHP-Kontextes hinreichend definiert.

Aber auch hier wird auf "simple and multi-dimensional arrays"
eingegangen. Damit verstehe ich die Aussage "Mehrdimensionale Arrays
gibt es in PHP nicht" nicht. Siehe auch noch einen Absatz weiter unten.


> Auf der abstrakten Ebene sollte man von "Bäumen", "Mengen", "Vektoren"
> und "Matrizen" sprechen. Diese Begriffe sind durch die Mathematik
> eindeutig definiert. Schon der Begriff "Array" ist
> implementationsspezifisch. Die meisten Arrays in PHP zB. sind gar keine
> Arrays, sondern Hashtables.

Ok, hier hab ich wohl ein bisschen zu schnell geschossen. Hier muss ich
dir recht geben. Da war meine Begrifflichkeit auch zu sehr auf Sprachen
beschränkt die das Konstrukt Array besitzen. Richtigerweise muss ich
hier aber eigentlich von Bäumen, Mengen oder Matrizen reden, da hast du
Recht.


> Völlig unabhängig davon, ob du theoretisch Recht hast oder nicht - die
> Terminologie in der PHP-Welt wird durch das PHP-Manual bestimmt - durch
> nichts und niemanden sonst.

Da stimme ich dir ja zu, allerdings definiert das PHP-Manual lediglich
die Terminologie der Syntax, nicht die der Logik. Die ist und sollte
IMHO unabhängig vom PHP-Manual sein.


> Natürlich muss man immer die Begrifflichkeiten abklären. Wenn ich an das
> englische Wort "tag" denke, sehe ich HTML-Anweisungen vor mir; jemand
> anderes vielleicht Grafitti-Kürzel. Erst aus dem Kontext wird klar, was
> gemeint ist. Mehrdimensionale Arrays in PHP sind eben schlicht Arrays,
> die Arrays enthalten, also Bäume ebenso wie Matrizen.

Ich hab das Gefühl wir bewegen uns mit unserer Argumentation immer
weiter weg von der eigentlichen Frage bzgl. Begrifflichkeiten im Kontext
der Software-Entwicklung hin zu einer generellen
Terminologie-Diskussion. Das ist aber IMHO nicht zielführend, da im
Kontext der Software-Entwicklung kein Mensch beim Wörtchen "tag" an
Grafitti denkt. Sicher wird erst mit dem entsprechenden Kontext die
wirkliche Bedeutung klar, allerdings sollte die bei der
Software-Entwicklung wie gesagt nicht auf Sprach- sondern auf
Logik-Ebene liegen. Alles andere ist eine weitere Frage und zwar die des
"Wie setze ich die so erarbeitete Logik jetzt dann in die jeweilige
Programmiersprache um".

Was machst du denn wenn ich jetzt sage ich habe folgendes Problem und
möchte es IT-mäßig in einer Software gelöst haben, kann dir aber noch
nicht sagen in welcher Sprache genau. Sagst du mir dann das das Problem
nicht lösbar ist weil du erst mal wissen musst welche Sprache du
verwenden sollst? Das ist doch Quatsch. Die Problemlösung ist und sollte
wie gesagt doch unabhängig von der Programmiersprache sein.

Ciao Markus

Ciao Markus

Re: Liste mit zwei Ebenen für Menü ausgeben

am 05.04.2008 11:54:06 von Tom Sousa

Am Fri, 04 Apr 2008 17:48:42 +0200 schrieb Christoph Herrmann:

> Tom Sousa schrieb:
>> "Mehrdimensionales Array" hört sich gut und kompliziert an.
>>
>> Im konkreten Fall soll es ein Menü sein, in dem die Menüpunkte erster Ebene
>> (also Punkt1, Punkt2) auch eigene Seiten darstellen.
>
> $array =
> {
> 'gruppe1' => array
> {
> 'seite1',
> 'seite2
> },
> 'gruppe2' => array
> {
> 'seite1',
> 'seite2
> }
> }
>
> Mehrdimensional heißt einfach, du hast ein Array mit weiteren Arrays als
> Elemente. Dadurch lässt sich sehr schön eine Baumstruktur erzeugen, die
> du ja auch im Menü dann abbilden willst.
>
> Hier zum lesen:
> http://www.php.net/manual/de/language.types.array.php
>
> echo '

';
>
> "foreach" würde ich einer while Schleife immer vorziehen beim
> durchlaufen einer Liste, denn dafür ist die Kontrollstruktur auch
> gedacht. Ist einfacher und schneller als eine "while" Schleife.
>
> Hier zum lesen:
> http://www.php.net/manual/de/control-structures.foreach.php
>
> Des weiteren würde ich Interpolation empfehlen je nach eigenem Geschmack
> (ich nutze es nicht, sehe es aber mittlerweile auch als sinnvoll an):
> http://www.php.net/manual/de/language.types.string.php#langu age.types.string.parsing
>
> Der Rest sollte eigentlich verständlich genug sein.

Dank Dir für deine sehr gute Hilfe, ich werde auf dieser Grundlage
weiterarbeiten und schauen was ich hinbekomme.

Grüße

Re: Liste mit zwei Ebenen für Menü ausgeben

am 05.04.2008 20:10:17 von Christoph Herrmann

Claus Reibenstein schrieb:
> Mehrdimensionale Arrays gibt es in PHP nicht. Gemeint sind Arrays, deren
> Elemente wiederum aus Arrays bestehen ("Geschachteltes Array" wäre wohl
> treffender). Damit lassen sich komplexe Baumstrukturen recht gut
> abbilden, und eine Menüstruktur ist letztendlich nichts anderes.

und warum sollten das jetzt keine Mehrdimensionale Arrays sein? :)

--
Mit freundlichen Grüßen,
Christoph Herrmann

http://dragonprojects.de/

Re: Liste mit zwei Ebenen für Menü ausgeben

am 06.04.2008 03:30:52 von Niels Braczek

Markus Deckmann schrieb:
> Hi Niels,
>=20
>> Die "ordentliche Form" ist im genannten Fall ein Baum, eine Matrix ode=
r
>> gar eine Menge von Elementen und Mengen. Alle diese Formen sind
>> "ordentlich", alle diese Formen werden in PHP durch ein
>> mehrdimensionales Array abgebildet.
>=20
> Aber nur weil ich bspw. die Menge von Elementen UND Mengen in der=20
> Programmiersprache abbilden KANN heißt doch noch nicht zwangsläufig=
das=20
> ich sie auch so abbilden SOLLTE und MUSS.

Nein, es heißt aber, dass es durchaus sinvoll sein kann. Spontan fäll=
t
mir als Beispiel func_get_args() ein.

> Damit meinte ich eigentlich nur eine einheitliche Form und keine=20
> gemischte Sachen wie eine Menge mit Elementen und Mengen.

Das kann aber uU. erforderlich sein. Ich verstehe deinen Einwand aber
und schließe mich dem insoweit an, dass man das möglichst vermeiden s=
ollte.

MfG
Niels

--=20
| http://www.kolleg.de =B7 Das Portal der Kollegs in Deutschland |
| http://www.bsds.de =B7 BSDS Braczek Software- und DatenSysteme |
| Webdesign =B7 Webhosting =B7 e-Commerce =B7 Joomla! Content Management =
|
------------------------------------------------------------ ------

Re: Liste mit zwei Ebenen für Menü ausgeben

am 06.04.2008 03:36:12 von Niels Braczek

Markus Deckmann schrieb:

> Ich hab das Gefühl wir bewegen uns mit unserer Argumentation immer=20
> weiter weg von der eigentlichen Frage bzgl. Begrifflichkeiten im Kontex=
t=20
> der Software-Entwicklung hin zu einer generellen=20
> Terminologie-Diskussion.

Jepp.

> Das ist aber IMHO nicht zielführend,

ACK.

> da im=20
> Kontext der Software-Entwicklung kein Mensch beim Wörtchen "tag" an=20
> Grafitti denkt. Sicher wird erst mit dem entsprechenden Kontext die=20
> wirkliche Bedeutung klar,

Das sollte auch nur ein Beispiel sein, das *jeder* nachvollziehen könne=
n
müsste.

> allerdings sollte die bei der=20
> Software-Entwicklung wie gesagt nicht auf Sprach- sondern auf=20
> Logik-Ebene liegen. Alles andere ist eine weitere Frage und zwar die de=
s=20
> "Wie setze ich die so erarbeitete Logik jetzt dann in die jeweilige=20
> Programmiersprache um".

Auch richtig. Auf der Logik-Ebene spricht man im Wesentlichen Mathematik
und UML. Der OP hatte allerdings eine Frage zur Implementation in PHP,
weswegen die Wortwahl "mehrdimensionales Array" eben *nicht* falsch oder
irreführend, sondern absolut korrekt war.

> Was machst du denn wenn ich jetzt sage ich habe folgendes Problem und=20
> möchte es IT-mäßig in einer Software gelöst haben, kann dir abe=
r noch=20
> nicht sagen in welcher Sprache genau. Sagst du mir dann das das Problem=
=20
> nicht lösbar ist weil du erst mal wissen musst welche Sprache du=20
> verwenden sollst? Das ist doch Quatsch. Die Problemlösung ist und sol=
lte=20
> wie gesagt doch unabhängig von der Programmiersprache sein.

Aus der Perspektive hast du ja auch Recht, aber die Perspektive war vor
deinem Einwurf gar nicht im Gespräch.

MfG
Niels

--=20
| http://www.kolleg.de =B7 Das Portal der Kollegs in Deutschland |
| http://www.bsds.de =B7 BSDS Braczek Software- und DatenSysteme |
| Webdesign =B7 Webhosting =B7 e-Commerce =B7 Joomla! Content Management =
|
------------------------------------------------------------ ------

Re: Liste mit zwei Ebenen für Menü ausgeben

am 06.04.2008 13:02:36 von Markus Deckmann

Hi Niels,

> Nein, es heißt aber, dass es durchaus sinvoll sein kann. Spontan fällt
> mir als Beispiel func_get_args() ein.

Ok, bei dieser Funktion kann es tatsächlich sein das ich ein derart
gestaltetes Array zurück erhalte. Allerdings halte ich es hier auch für
sauberer dieses Array in eine andere Form zu überführen bevor ich es
weiterverarbeite (da ich sie dann mit bewährten Standards bearbeiten
kann) als sofort die Rückgabe zu bearbeiten.

Ciao Markus

Re: Liste mit zwei Ebenen für Menü ausgeben

am 08.04.2008 11:21:46 von Tom Sousa

Am Fri, 04 Apr 2008 17:48:42 +0200 schrieb Christoph Herrmann:
>
> $array =
> {
> 'gruppe1' => array
> {
> 'seite1',
> 'seite2
> },
> 'gruppe2' => array
> {
> 'seite1',
> 'seite2
> }
> }
>
> Mehrdimensional heißt einfach, du hast ein Array mit weiteren Arrays als
> Elemente. Dadurch lässt sich sehr schön eine Baumstruktur erzeugen, die
> du ja auch im Menü dann abbilden willst.
>
> echo '

';

Hallo Christoph,

nachdem ich mir in den letzten Tagen weite Teile der PHP-Dokumentation
einverleibt habe und nun etwas mehr verstehe, habe ich noch eine Frage die
ich alleine nicht lösen kann.

Nach einigen Korrekturen gibt der Code bei mir eine schöne Liste mit zwei
Ebenen aus. Die Arraybildung:

$array = array
(
'gruppe1' => array
(
'seite1',
'seite2',
'seite3'
),
'gruppe2' => array
(
'seite1',
'seite2',
'seite3'
),
);

Mein Problem ist nun, dass ich keinen Weg finde, wie ich die Markierbarkeit
des aktuellen Menüpunktes hinbekomme. In meinem Beispiel, dass ich zu
Anfang postete lief das nach diesem Prinzip:

> if (strstr($_SERVER['SCRIPT_NAME'],$key))
> {
> echo ''.$val.'';
> }

Hier wird der aktuelle Menüpunkt mit CSS formatierbar und von seiner
Verlinkung befreit. Kann man das Prinzip auf die Liste mit zwei Ebenen
übertragen? Meinem Verständnis nach müsste hier z.B.: das Array "Gruppe1"
einen Schlüssel mit Menülink und einen Wert mit Menübezeichnung haben. Oder
sehe ich das falsch?

Gibt es hier für eine Lösung?

Grüße, Tom

Re: Liste mit zwei Ebenen für Menü ausgeben

am 08.04.2008 13:42:21 von Tom Sousa

Am Tue, 8 Apr 2008 11:21:46 +0200 schrieb Tom Sousa:
> $array = array
> (
> 'gruppe1' => array
> (
> 'seite1',
> 'seite2',
> 'seite3'
> ),
> 'gruppe2' => array
> (
> 'seite1',
> 'seite2',
> 'seite3'
> ),
> );
>
> Mein Problem ist nun, dass ich keinen Weg finde, wie ich die Markierbarkeit
> des aktuellen Menüpunktes hinbekomme. In meinem Beispiel, dass ich zu
> Anfang postete lief das nach diesem Prinzip:
>
>> if (strstr($_SERVER['SCRIPT_NAME'],$key))
>> {
>> echo ''.$val.'';
>> }

Ich habe es hinbekommen. Es funktioniert eigentlich genauso wie im
Ausgangsbeispiel, nur das man die if-Konstrukte entsprechend verschateln
musste.

Noch eine allgemeine Frage... ich habe nun den values von 'seite*' einen
eigenen key vorgesetzt der mir nachher in der Form "index.php?seite=1_1"
die einzelnen Seitenbereiche aufruft:

> $array = array
> (
> 'gruppe1' => array
> (
> '1_1'=>'seite1',
> '1_2'=>'seite2',
> '1_3'=>'seite3'
> ),
> 'gruppe2' => array
> (
> '2_1'=>'seite1',
> '2_2'=>'seite2',
> '2_3'=>'seite3'
> ),
> );

Nun frage ich mich, ob es eine Möglichkeit gibt auch den Gruppen einen
Schlüssel zuzuweisen. Ich weiss nicht ob das gehen kann, da "gruppe*"
bereits selbst ein Schlüssel ist und das nachfolgende Array als Wert
zugeordnet hat.

Gibt es sowas in der Art?:
1_0 => 'gruppe1' => array (...)

Vielleicht gibt es einen Weg den Arraywert "gruppe1" gleichzeitig als
Arrayschlüssel für den nachfolgenden Wert zu definieren.

So funktioniert das selbstverständlich nicht, es soll nur verdeutlichen
worauf ich hinaus möchte.

Weiss du/jemand worauf ich hinaus will? Kann du oder jemand anderes mir
helfen?

Grüße

Re: Liste mit zwei Ebenen für Menü ausgeben

am 08.04.2008 13:45:22 von Markus Deckmann

Hi Tom,

> Nach einigen Korrekturen gibt der Code bei mir eine schöne Liste mit zwei
> Ebenen aus. Die Arraybildung:
>
> $array = array
> (
> 'gruppe1' => array
> (
> 'seite1',
> 'seite2',
> 'seite3'
> ),
> 'gruppe2' => array
> (
> 'seite1',
> 'seite2',
> 'seite3'
> ),
> );
>
> Mein Problem ist nun, dass ich keinen Weg finde, wie ich die Markierbarkeit
> des aktuellen Menüpunktes hinbekomme. In meinem Beispiel, dass ich zu
> Anfang postete lief das nach diesem Prinzip:

Ich würde hier dem Array ein zusätzliches Element mitgeben welches
bestimmt welches der aktuelle Menüpunkt ist und diesen bei einem Wechsel
entfernen und auf einen anderen Punkt setzen. Das Array sollte nach
Generierung dann in etwa wie folgt aussehen:

$array = array(
'gruppe1' => array(
'seite1' => 1,
'seite2' => 0,
'seite3' => 0
),

'gruppe2' => array(
'seite1' => 0,
'seite2' => 0,
'seite3' => 0
)
)

Die Seite mit dem Parameter 1 wäre dann damit ausgewählt und kann dann
bei der Generierung des HTML-Codes beachtet werden. Hier kannst du jetzt
dann für 1 eine bestimmte Klasse setzen die du dann über CSS formatieren
kannst.

Das dürfte das gewesen sein was du wissen wolltest, oder habe ich da was
falsch verstanden?

Ciao Markus

Re: Liste mit zwei Ebenen für Menü ausgeben

am 08.04.2008 16:50:08 von Niels Braczek

Tom Sousa schrieb:

> Nun frage ich mich, ob es eine Möglichkeit gibt auch den Gruppen eine=
n
> Schlüssel zuzuweisen. Ich weiss nicht ob das gehen kann, da "gruppe*"=

> bereits selbst ein Schlüssel ist und das nachfolgende Array als Wert
> zugeordnet hat.
>=20
> Gibt es sowas in der Art?:=20
> 1_0 =3D> 'gruppe1' =3D> array (...)
>=20
> Vielleicht gibt es einen Weg den Arraywert "gruppe1" gleichzeitig als
> Arrayschlüssel für den nachfolgenden Wert zu definieren.

Du denkst gerade völlig quer.

$array =3D array
(
1 =3D> array (
1 =3D> 'seite1',
2 =3D> 'seite2',
3 =3D> 'seite3'
),
2 =3D> array (
1 =3D> 'seite4',
2 =3D> 'seite5',
3 =3D> 'seite6'
),
);


$key =3D '1_2';
$index =3D explode( '_', $key );
$element =3D $array[$index[0]][$index[1]];
echo $element; // gibt 'seite2'

MfG
Niels


--=20
| http://www.kolleg.de =B7 Das Portal der Kollegs in Deutschland |
| http://www.bsds.de =B7 BSDS Braczek Software- und DatenSysteme |
| Webdesign =B7 Webhosting =B7 e-Commerce =B7 Joomla! Content Management =
|
------------------------------------------------------------ ------

Re: Liste mit zwei Ebenen für Menü ausgeben

am 10.04.2008 15:39:45 von Christoph Herrmann

Tom Sousa schrieb:
> Hier wird der aktuelle Menüpunkt mit CSS formatierbar und von seiner
> Verlinkung befreit. Kann man das Prinzip auf die Liste mit zwei Ebenen
> übertragen? Meinem Verständnis nach müsste hier z.B.: das Array "Gruppe1"
> einen Schlüssel mit Menülink und einen Wert mit Menübezeichnung haben. Oder
> sehe ich das falsch?
>
> Gibt es hier für eine Lösung?

gibt mit Sicherheit viele Lösungen dafür. Ich nutze folgendes vom
Prinzip her. Jede Ebene in der URL durch eine Variable kennzeichnen,
also würde ein Link dann zum Beispiel so aussehen:

index.php?group=gruppe1&page=seite1

Die Abfrage erfolgt dann über beide Variablen, hier als Beispiel der
Ausschnitt der inneren Schleife meines letzten Posts:

....
forach($pages as $page)
{

echo "


  • if($_GET['group'] == $group && $_GET['page'] == $page)
    {
    echo ' id="current"';
    }

    echo ">$page
  • ";

    }
    ....

    Natürlich musst dann die beiden GET Parameter vorher validieren, daher
    zumindest auf einen Defaultwert setzen (Startseite), wenn noch kein Link
    aufgerufen ist.

    --
    Mit freundlichen Grüßen,
    Christoph Herrmann

    http://dragonprojects.de/