André Laugks: Array

Hallo!

Ich möchte/muß eine Navigation in einem Array abbilden. Dieses Array möchte ich dann rekursiv durchlaufen. Das funktioniert auch soweit.

Nur bin ich nicht wirklich zu frieden.

$nav = array(
    '1.1 Ebene',
    array('2/1 Ebene',
       '2/2 Ebene',
       array('3/1 Ebene',
          array('4/1 Ebene',
             '4/2 Ebene'
       )
     )
    ),
    '1.2 Ebene',
    array('2/1 Ebene',
       '2/2 Ebene',
       array('3/1 Ebene',
          array('4/1 Ebene',
             '4/2 Ebene'
       )
     )
    ),
   );

<?PHP
function print_var($var)
 {
  echo "<pre>";
  echo var_dump($var);
  echo "</pre>";
 }

$test['1. M'][] = "1 Menü";
$test['1. M']['1.1 M'][] = "1.1 Menü";
$test['1. M']['1.2 M'][] = "1.2 Menü";
$test['1. M']['1.3 M'][] = "1.3 Menü";
$test['1. M']['1.3 M']['1.3.1 M'][] = "1.3.1 Menü";
$test['1. M']['1.3 M']['1.3.2 M'][] = "1.3.2 Menü";
$test['2. M'][] = "2. Menü";

function rek_array($nav_array, $tiefe)
 {
  $tiefe++;
  while(list($key, $array) = each($nav_array))
   {
    if(is_array($array))
     {
      rek_array($array, $tiefe);
     }
     else
      {
       echo "<div style="margin-left:" . (10*$tiefe) . "">" . $array .  " (" . $tiefe . ")</div>\n";
      }
   }
 }

rek_array($test, -1);

print_var($test);

?>

MfG, André Laugks

--
L-Andre @ gmx.de
  1. Upss, eigentlich wollte ich auf die Vorschau klicken.

    Hallo!

    Ich möchte/muß eine Navigation in einem Array abbilden. Dieses Array möchte ich dann rekursiv durchlaufen. Das funktioniert auch soweit.

    ---------------------------------><8-------------------------------
    <?PHP

    $test['1. M'][] = "1 Menü";
    $test['1. M']['1.1 M'][] = "1.1 Menü";
    $test['1. M']['1.2 M'][] = "1.2 Menü";
    $test['1. M']['1.3 M'][] = "1.3 Menü";
    $test['1. M']['1.3 M']['1.3.1 M'][] = "1.3.1 Menü";
    $test['1. M']['1.3 M']['1.3.2 M'][] = "1.3.2 Menü";
    $test['2. M'][] = "2. Menü";

    function rek_array($nav_array, $tiefe)
     {
      $tiefe++;
      while(list($key, $array) = each($nav_array))
       {
        if(is_array($array))
         {
          rek_array($array, $tiefe);
         }
         else
          {
           echo "<div style="margin-left:" . (10*$tiefe) . "">" . $array .  " (" . $tiefe . ")</div>\n";
          }
       }
     }

    rek_array($test, -1);
    ?>
    ---------------------------------><8-------------------------------

    Mit dieser Version bin ich nun einigermaßen zufrieden, wenn ich  folgende Array-Ansätze betrachte.

    $nav = array(
      array("1. M" => "1. Menü",
      array(
       array("1.1 M" => "1.1 Menü"),
       array("1.2" => "1.1 Menü")
       )
      )
    );

    $nav = array(
     '1.1 Ebene',
     array('2/1 Ebene',
        '2/2 Ebene',
        array('3/1 Ebene',
           array('4/1 Ebene',
              '4/2 Ebene'
        )
      )
     ),
     '1.2 Ebene',
     array('2/1 Ebene',
        '2/2 Ebene',
        array('3/1 Ebene',
           array('4/1 Ebene',
              '4/2 Ebene'
        )
      )
     ),
    );

    Ich habe da noch folgenden Ansatz, daß mir aber diese Menüstruktur generiert.

    Blumen
    Blumen
      Balkonblumen
      Balkonblumen
      Zimmerpflanzen
      Zimmerpflanzen

    Das kommt, weil ich in jedem Array zwei Elemente habe. Ich komme aber nicht drauf, wie ich das "abstellen" kann.

    ------------------------------><8----------------------------------
    <?PHP
    $nav = array(
         array("titel" => "Blumen", "href" => "blumen.html",
          array("titel" => "Balkonblumen", "href" => "balkonblumen.html"),
          array("titel" => "Zimmerpflanzen", "href" => "zimmerpflanzen.html")
         )
       );

    function rek_array($nav_array, $tiefe)
     {
      $tiefe++;
      while(list($key, $array) = each($nav_array))
       {
        if(is_array($array))
         {
          rek_array($array, $tiefe);
         }
         else
          {
           echo "<div style="margin-left:" . (10*$tiefe) . ""><a href="" . $nav_array['href'] . "">" . $nav_array['titel'] .  "</a></div>\n";
          }
       }
     }

    rek_array($nav, 0);

    ?>
    ----------------------------------><8-------------------------------

    Hat jemand schon einmal sowas gemacht und kann mir ein praktischen Ansatz liefern auch wenn er ganz anders ist oder ein paar Tipps auf Lager?

    MfG, André Laugks

    --
    L-Andre @ gmx.de
    1. Hi,

      so könnte es evtl. gehen.

      function rek_array($nav_array, $tiefe)
        {
         $tiefe++;
         while(list($key, $array) = each($nav_array))
          {
           if(is_array($array))
            {
             rek_array($array, $tiefe);
            }
            else
             {
                if ($key != "title") { continue; }
              echo "<div style="margin-left:" . (10*$tiefe) . ""><a href="" . $nav_array['href'] . "">" . $nav_array['titel'] .  "</a></div>\n";
             }
          }
        }

      1. Hallo!

        if ($key != "title") { continue; }

        Das hatte ich auch schon überlegt. Leider habe ich eine variable Anzahl an Einträgen, also nicht nur "titel" und "href".

        MfG, André Laugks

        --
        L-Andre @ gmx.de
  2. Hallo!

    Ich möchte/muß eine Navigation in einem Array abbilden. Dieses Array möchte ich dann rekursiv durchlaufen. Das funktioniert auch soweit.

    Wie das in PERL geht, siehe

    http://perlbase.xwolf.de/cgi-bin/perlbase.cgi?query_string=traverse&mode=simple_text

    Gruss, Rolf

    --
    SELFforum - Das Tor zur Welt!
    Theoretiker: Wie kommt das Kupfer in die Leitung?
    Praktiker: Wie kommt der Strom in die Leitung?