Enrico: Umkopieren eines Arrays in ein anderes funktioniert nicht

Hallo und guten Abend,

einem werten Kumpel habe ich es zu verdanken, dass ich an einem Problem festhänge, das, so befürchte ich, sicherlich recht einfach zu lösen ist, aber ich komme einfach nicht auf die Lösung.

Ich baue, in Abhängigkeit übergebener Variablen, mein Haupt- und das zugehörige Untermenü dynamisch auf.

Hier die Arrays:

  
   $PunkteHauptmenue       = array ("Startseite", "WirUeberUns", "Ruestzeug", "Waffen", ...);  
  
   $PunkteUntermenue[1]    = array ("BitteWaehlen", "WirUeberUns", "Termine", "Fotos");  
   $PunkteUntermenue[2]    = array ("BitteWaehlen", "AusStoff", "AusLeder", "AusMetall");  
   $PunkteUntermenue2      = array ("BitteWaehlen", "Zurueck", "FuerDenKopf", "FuerDenOberkoerper", ...);  
   $PunkteUntermenue[3]    = array ("BitteWaehlen", "Speere", "Haemmer", ...);  
   $PunkteUntermenue[4]    = array ("BitteWaehlen", "Muetzen", "Tuniken", "Hosen", "Maentel", "...);  
   $PunkteUntermenue[5]    = array ("BitteWaehlen", "Mjoellnir", "AusBernstein", "Fibeln", ...);  
   $PunkteUntermenue[6]    = array ("BitteWaehlen", "LichtFeuer", "Mobiliar", "Sonstiges");  
   $PunkteUntermenue[7]    = array ("BitteWaehlen", "Leder", "Stoffe", "SchliessenKnebel", ...);  
   $PunkteUntermenue[8]    = array ("BitteWaehlen", "Bezahlung", "Versand", "Rücksendung", ...);  

Ich habe für mein Posting weitere Arrayelemente weggelassen und deren Vorkommen durch "..." verdeutlicht, im "echten" Skript sind die Arrays natürlich alle vollständig.

Wähle ich einen Hauptmenüpunkt aus, dann wird das entsprechende Untermenü angezeigt.

Mit nur einer Ebene funktioniert es auch ohne Probleme.

Beim Abfrage des Untermenues mit dem Index 2 und dem jeweils weiteren Untermenü klappt es nicht.

Zur gewünschten Anzeige der Menüs nach Anwählen des Hauptmenüpunktes "Rüstzeug":

+--------------------+
   | Hauptmenü          |
   +--------------------+
   | Startseite         |
   | Wir über uns       |
   | [Rüstzeug]         |
   | Waffen             |
   | ...                |
   +--------------------+

+--------------------+
   | Untermenü          |
   +--------------------+
   | Bitte wählen       |
   | Aus Stoff          |
   | Aus Leder          |
   | Aus Metall         |
   +--------------------+

Nach Anklicken, beispielsweise des Untermenüpunktes "Aus Leder" will ich folgende Anzeige:

+--------------------+
   | Hauptmenü          |
   +--------------------+
   | Startseite         |
   | Wir über uns       |
   | [Rüstzeug]         |
   | Waffen             |
   | ...                |
   +--------------------+

+--------------------+
   | Untermenü          |
   +--------------------+
   | Bitte wählen       |
   | Zurück             |
   | Für den Kopf       |
   | Für den Oberkörper |
   | ...                |
   +--------------------+

Hier der php-Code, der für den korrekten Aufbau des Untermenüs, auf mein Problem gemünzt, sorgen soll (es aber leider nicht tut):

  
   if ($i == 2) // $PunkteHauptmenue[2] mit dem Wert "Ruestzeug" wurde ausgewählt  
   {  
      if (isset ($Trigger)) // Anzeige entweder des Einstiegsuntermenüs ("AusStoff", "AusLeder", "AusMetall") oder des weiteren Untermenüs  
      {  
         for ($y = 0, $z = count ($PunkteUntermenue2); $y < $z; $y++) // Hier möchte ich das jeweilige Array in das Array $Array  
            $Array[$y] = $PunkteUntermenue2[$y];                      // umkopieren, da ich danach mit diesem weiterarbeiten werde  
      }  
   }  
   else // Es wurde irgendein anderer Hauptmenüpunkt ausgewählt  
   {  
      for ($y = 0, $z = count ($PunkteUntermenue[$i]); $y < $z; $y++)  
         $Array[$y] = $PunkteUntermenue[$i][$y];  
   }  
  
   if ($Untermenue == 0) // Es wurde noch kein Untermenüpunkt ausgewählt,...  
      $Start = 0;        // ..., somit Start bei "Bitte wählen"  
   else                  // Es wurde ein Untermenüpunkt gewählt  
      $Start = 1;        // Wegfall des Elements "BitteWaehlen"  
  
   for ($k = $Start, $l = sizeof ($Array); $k < $l; $k++) // Zugehöriges Array "Untermenue" durchlaufen  
   {  
      ... Ausgabe ...  
   }  

Der Parameter "Trigger" wird bei der Ausgabe den Links des Einstiegsuntermenüs angehängt, aber so weit komme ich nicht mal, da das Array $Array "NULL(0) NULL" ist.

Dies bedeutet für mich, dass das Umkopieren des jeweiligen Arrays ins Array $Array nicht funktioniert.

Aber warum klappt das so nicht?

Wie könnte ich den Code zudem, wenn er denn mal funktioniert, schlanker programmieren?

Vielen Dank für eure Hilfe und Gruß,
Enrico

  1. Tach!

    einem werten Kumpel habe ich es zu verdanken, dass ich an einem Problem festhänge, das, so befürchte ich, sicherlich recht einfach zu lösen ist, aber ich komme einfach nicht auf die Lösung.

    Beim PHP-Programmieren sind deine wertvollsten Kumpel das auf E_ALL stehende error_reporting und ein eingeschaltetes display_errors. Dazu kommen die Kontrollausgaben mit var_dump() und print_r().

    Wähle ich einen Hauptmenüpunkt aus, dann wird das entsprechende Untermenü angezeigt.

    Das ist aus PHP-Sicht unerheblich. PHP soll nur bestimmte Werte entgegennehmen oder sich anderswo holen und daraus eine Ausgabe erzeugen. Beschreibe also mal - zumindest für dich in Gedanken - was aus PHP-Sicht ablaufen soll.

    Mit nur einer Ebene funktioniert es auch ohne Probleme.
    Beim Abfrage des Untermenues mit dem Index 2 und dem jeweils weiteren Untermenü klappt es nicht.

    Konkreter bitte! Was für eine Ausgabe wird erzeugt und was nicht, was hast du stattdessen erwartet?

    Zur gewünschten Anzeige der Menüs nach Anwählen des Hauptmenüpunktes "Rüstzeug":
    Nach Anklicken, beispielsweise des Untermenüpunktes "Aus Leder" will ich folgende Anzeige:

    Nein, willst du nicht. Zumindest nicht mit PHP. Was der Browser daraus macht, steht auf einem anderen Blatt, das hier grad nicht interessiert.

    for ($y = 0, $z = count ($PunkteUntermenue2); $y < $z; $y++) // Hier möchte ich das jeweilige Array in das Array $Array
                $Array[$y] = $PunkteUntermenue2[$y];                      // umkopieren, da ich danach mit diesem weiterarbeiten werde

    Es gibt foreach. Und wenn du einfach nur ein Array in ein anderes umkopieren willst - warum auch immer du das für notwendig empfindest - dann reicht eine einfache Zuweisung. Durchlaufen und einzeln kopieren ist nur notwendig, wenn du Werte weglassen oder umformen willst.

    Der Parameter "Trigger" wird bei der Ausgabe den Links des Einstiegsuntermenüs angehängt, aber so weit komme ich nicht mal, da das Array $Array "NULL(0) NULL" ist.

    Was soll das für eine Ausgabe sein, wie hast du die erzeugt? Wenn null in $Array ist und du das nicht explizit da reingeschrieben hast, dann hast du eine Notice-Meldung übersehen oder unterdrückt.

    Dies bedeutet für mich, dass das Umkopieren des jeweiligen Arrays ins Array $Array nicht funktioniert.
    Aber warum klappt das so nicht?

    Überprüfe alle Variableninhalte, Funktions- und Ausdrucksergebnisse, die auf dem von dir gewünschten Weg durch den Code eine Rolle spielen.

    dedlfix.

    1. Hallo dedlfix,

      danke für Deine ausführliche Antwort.

      Mein Problem bestand schlicht und ergreifend "nur" darin, dass ich bei der if-Abfrage des Parameters "Trigger" vergessen hatte, einen else-Zweig einzubinden.

      Gruß,
      Enrico

    2. Beim PHP-Programmieren sind deine wertvollsten Kumpel das auf E_ALL stehende error_reporting und ein eingeschaltetes display_errors. Dazu kommen die Kontrollausgaben mit var_dump() und print_r().

      Ich beantrage, diese wohlgeformten und sinntragenden Sätze per Button und/oder Kurzcode in dei Antworten einfügbar zu machen. Vorschlag für den Kurzcode: "ERR&VARDMP"

      Jörg Reinholz