Spaziergang array rekursiv und drucken Sie den Pfad der Wanderung

Kann mir jemand helfen mit etwas code oder Anweisungen auf, wie man rekursiv ein array und bei erreichen des letzten Elements drucken Sie den vollständigen Pfad? Ein einfaches echo nicht arbeiten, weil ich passen den code an eine andere Funktion, die ich entwickle.

Die Funktion nicht, musst die array-dimension, da diese Parameter werden übergeben:

Beispiel:

$depth = 8;

$array[1][3][5][6][9][5][8][9];

Wenn-Funktion gelingt das 8. element print alle Weg:

//print path
'1 -> 3 -> 5 -> 6 -> 9 -> 5 -> 8 -> 9'
  • Wie gesagt, nur das drucken in diesem format arbeiten, weil ich implementieren Sie den code in einer anderen Funktion.

  • array Schlüssel den gleichen Wert haben können. Offensichtlich nicht den gleichen Wert in der gleichen Reihenfolge für die gesamte arary.

Aktualisiert:

Walk rekursiv-Funktion:

$someArray[1][2][3] = 'end';
$someArray[1][2][6] = 'end';
$someArray[1][3][6] = 'end';
$someArray[4][3][7] = 'end';

function listArrayRecursive(&$array_name, $ident = 0){
    if (is_array($array_name)){
        foreach ($array_name as $k => &$v){
            if (is_array($v)){
                for ($i=0; $i < $ident * 10; $i++){ echo "&nbsp;"; }
                echo $k . " : " . "<br>";
                listArrayRecursive($v, $ident + 1);
            }else{
                for ($i=0; $i < $ident * 10; $i++){ echo "&nbsp;"; }
                echo $k . " : " . $v . "<br>";
            }
        }
    }else{
        echo "Variable = " . $array_name;
    }
}

listArrayRecursive($someArray);

Drucken:

1 :
      2 :
                3 : end
                6 : end
      3 :
                6 : end
4 :
      3 :
                7 : end

Nun, wie kann ich auch drucken, der Weg des Arrays jedesmal, wenn er das Ende erreicht? Zum Beispiel:

1 :
      2 :
                3 : end : path -> 1,2,3
                6 : end : path -> 1,2,6
      3 :
                6 : end : path -> 1,3,6
4 :
      3 :
                7 : end : path -> 4,3,7

BEARBEITETEN CODE HINZUFÜGEN EINER DRITTEN PARAM AUFZEICHNEN DER PFAD:

$someArray[1][2][3] = 'end';
$someArray[1][2][6] = 'end';
$someArray[1][3][6] = 'end';
$someArray[4][3][7] = 'end';
$someArray[3][2] = 'end';

function listArrayRecursive(&$array_name, $ident = 0, $path = null){
     foreach ($array_name as $k => &$v){
         if (is_array($v)){
            for ($i=0; $i < $ident * 10; $i++){ echo "&nbsp;"; }
            echo $k . " : " . "<br>";
            $path .= $k . ', ';
            listArrayRecursive($v, $ident + 1, $path);
        }else{
             for ($i=0; $i < $ident * 10; $i++){ echo "&nbsp;"; }
             echo $k . " : " . $v . ' - path -> ' . $path . "<br>";
        }
    }
}

listArrayRecursive($someArray);

Drucken:

1 :
          2 :
                    3 : end - path -> 1, 2,
                    6 : end - path -> 1, 2,
          3 :
                    6 : end - path -> 1, 2, 3,
4 :
          3 :
                    7 : end - path -> 1, 4, 3,
3 :
          2 : end - path -> 1, 4, 3, 
  • Gut, es ist die grundlegende Aufgabe zu lösen, mit Rekursion. Was haben Sie versucht?
  • eigentlich habe ich diesen code für die Rekursion codepad.org/iyrcdfQP, aber Im stecken auf den Teil, auf den tracking-Pfad des aktuellen $ - Taste.
  • Können Sie geben eine klare Beispiel, was mehrere Elemente innerhalb einer beliebigen Tiefe von array bzw., wenn das array nicht verschachtelt, so tief wie $depth? Welches problem ist dies die Lösung?
  • Yah, es wird nie die Tiefe, nur versuchen zu veranschaulichen. Wenn ich mit dem Skript die maximale Tiefe, die ich begegnen, wird wahrscheinlich 3 Ebenen. Wenn Sie überprüfen Sie den code auf den Kommentar oben sehen Sie, was Im tun mit ihm.
  • codepad.viper-7.com/tW52eW
  • Hast du post diese Frage schon gestellt? Der code sieht vertraut.
  • Ich stellte den code und Ausführung hier: codepad.org/iyrcdfQP ... Es wird verwendet, um drucken Sie eine Menü und andere Dinge tun. Im Aufbau einer map array dynamisch erstellen von Menüs, Tabellen, Formulare für mich. In der ['map'] - Taste die Rekursion sollte nur zu Fuß zahlen, dass ist, warum ich is_number. Alle anderen Elemente gehen, um eine Einstellung zu der Ebene des Arrays ist. Die Tiefe wäre die dimension des Arrays. Und es wird verwendet, um drucken ein dropdown-Menü mit mehreren Dimensionen. Wie gesagt auf den Kommentar oben, diese sollten maximal 3 Dimensionen ...
  • Sorry, ich habe. Seit Englisch ist nicht meine Muttersprache, ich habe Probleme, mich selbst auszudrücken. Wie ich immer Antwort bekomme, hier aber nicht auf diese Frage, dachte, ich könnte schreiben Sie die Bohrung Frage für eine bessere Erklärung ...
  • Haben Sie getan, jede mod auf, dass code, den Sie umgebucht die URL? Konnte nicht gefunden werden. Vielen Dank,
  • NÖ, es ist nur der gleiche code, aber ich bin mit viper7, denn das zeigt die Ausgabe als HTML statt Klartext.
  • Ich sehe. Vielleicht Stimmen Sie zu löschen die andere Frage, bevor Sie diese bekommt-Flagge als exaktes Duplikat.
  • ok, markiert, um gelöscht werden.
  • Bitte nicht re-post mit der gleichen Frage. Wenn Sie brauchen, um re-word, dann neu-Wort-das original.

InformationsquelleAutor Henrique | 2011-09-28
Schreibe einen Kommentar