PHP: Liefert ein Array aus rekursiver Funktion

8

Ich habe ein Array wie dieses:

%Vor%

Was ich tun muss, ist eine Brotkrume mit Anchorors zu bauen. Dasjenige, das am Ende der Liste steht, sollte das erste sein. Also als Beispiel:

Sport und Tempo libero & gt; Kategorie & gt; Calcio ...

Ich versuche, das XML mit einer Funktion auf diese Weise ohne Erfolg zu iterieren:

%Vor%

Ich habe bei stackoverflow etwas Ähnliches gefunden, aber keine Vorschläge haben mir geholfen, das herauszufinden.

    
Luca 09.12.2016, 17:32
quelle

4 Antworten

9

Um eine rekursive Funktion mit einer Ausgabe zu erstellen, benötigen Sie drei Dinge:

  1. Eine Variable oder ein Parameter, der die aktuelle Position enthält, also $r in Ihrem Code. Das hast du richtig verstanden.
  2. Eine Variable oder ein Parameter, der das Ergebnis enthält, das Sie nicht haben. Zunächst scheint es $bread zu sein, aber es enthält keinen Wert, da es bei jedem Aufruf von recursive() leer ist. Eine einfache Lösung besteht darin, sie in der Funktion als global zu deklarieren.
  3. Eine if -Anweisung, die die Stoppbedingung überprüft, die Sie nicht haben. Stattdessen haben Sie eine do-while -Schleife in Ihrem Code.

Sie haben also zwei Fehler. Basierend auf Ihrem Code und ändern Sie es so wenig wie möglich, das ist der richtige Code:

%Vor%

Da gehen Sie.

Update: Ich stimme @FlameStorm zu, global sollte nach Möglichkeit vermieden werden. Ich habe auch einen Vorschlag erhalten, stattdessen static zu verwenden, aber es führt zu einem Fehler. Daher empfehle ich, auch static zu vermeiden, wenn Sie nicht sicher sind, wie Sie es verwenden sollen.

Dies ist der verbesserte Code:

%Vor%

Die Variable $bread außerhalb der Funktion wird nicht mehr benötigt. Außerdem wird weder global noch static verwendet.

    
Rei 12.12.2016, 15:27
quelle
4

SimpleXMLElement ist kein Array. Sie könnten es in ein Array konvertieren, aber PHP bietet einen Iterator speziell für diesen Fall, SimpleXMLIterator .

Da Sie eine rekursive Struktur haben, ist mein Vorschlag, sie mit RecursiveIteratorIterator zu reduzieren. Unter der Annahme, dass sich Ihre Daten in einer Variablen namens $xml befinden, sieht Ihre Lösung möglicherweise so aus:

%Vor%     
quickshiftin 11.12.2016 22:53
quelle
0
%Vor%

Die Ausgabe im Browser:

  

Sport und Tempo libero & gt; Kategorie & gt; Calcio & gt; Abbigliamento & gt; Bambine und Ragazze   Sport und Tempo libero & gt; Kategorie & gt; Calcio & gt; Abbigliamento & gt; Bambine und Ragazze   (die zweite Zeile mit Links)

Der generierte HTML-Code:

%Vor%     
code_angel 12.12.2016 12:28
quelle
0

Eine Antwort oben korrigiert - Sie sollten global vermeiden, wenn Sie können.

Also, der Code wird

sein %Vor%     
FlameStorm 13.12.2016 20:44
quelle

Tags und Links