PHP-Übergabe als Referenz in rekursiver Funktion funktioniert nicht

8

Ich habe zwei Funktionen, die ich verwende, um Schrägstriche aus einem tief verschachtelten Objekt / Array-Kombinationsfeld hinzuzufügen oder zu entfernen. Die erste "Ebene" des Arrays ist immer ein Objekt, aber einige seiner Eigenschaften können Arrays oder Objekte sein.

Hier sind meine zwei Funktionen:

%Vor%

So genannt werden:

%Vor%

Die Funktion entfernt jedoch die Schrägstriche nicht vom verschachtelten Array. Das in die Funktion übergebene Objekt ist wie folgt:

%Vor%

Was habe ich falsch gemacht? Irgendwo entlang der Linie fehlt eine Referenz ...

    
DisgruntledGoat 01.08.2009, 13:02
quelle

2 Antworten

14

foreach verwendet eine Kopie des Arrays / Objekts und nicht das Array / Objekt selbst:

  

Hinweis: Wenn das Array nicht auf verweist, foreach arbeitet mit einer Kopie des angegebenen Arrays und nicht mit dem Array selbst. foreach hat einige Nebenwirkungen auf den Array-Zeiger. Verlassen Sie sich nicht auf den Array-Zeiger während oder nach dem foreach , ohne ihn zurückzusetzen.

Verwenden Sie also eine Referenz:

%Vor%

Oder verwenden Sie das Array-Element / die Objekteigenschaft selbst wie Kuroki Kaze, indem Sie $arr[$key] anstelle des kopierten Wertes $field verwenden.

    
Gumbo 01.08.2009, 13:19
quelle
2

foreach erstellt eine Kopie des Wertes, nehme ich an.

Versuchen Sie es mit objSlash( $arr[$key], $add ) intad von objSlash( $field, $add ) in foreach .

    
Kuroki Kaze 01.08.2009 13:04
quelle