Bäumchen Problem

Denfie

Mitglied
Array oder so Problem

Hiho,

ich muss ehrlich sagen ich verstehe langsam die PHP-Welt nicht mehr.

Ich wollte mir gerade ein paar schöne Ordner-Bäumchen bauen und wundere mich das es nicht geht. Ich zeige euch mal meinen Code und ihr könnte ja vielleicht schon einen Fehler sehen.

PHP:
$clear = "/var/www_test/public_html/media/";
$array = array();
$this->folder[0] = "/var/www_test/public_html/media/catalog/product/cache/1/image/5e06319eda06f020e43594a9c230972d/g/l";
define("DS", "/");

public function getTree(&$array, $clear=null){
            foreach($this->folder as $value){
                $this->getArrTree($value, $array, $clear);
            }// end foreach
      }// end function getTree

private function getArrTree($path, &$array, $clear=null){
        $ret = array();

        if(!is_null($clear))
            $path = trim(str_replace($clear, '', $path), DS);

        if(!empty($path)){
            $dump = explode(DS, $path);
            $path = trim(str_replace($dump[0], '', $path), DS);
            if(!isset($array[$dump[0]])){
                $array[$dump[0]] = array();
            }// end if
            $this->getArrTree($path, $array[$dump[0]], $clear);
}
        
      }// end function getArrTree

Diese beiden Funktionen machen das Unfassbare. Ich habe einen Ordner mit dem Namen 5e06319eda06f020e43594a9c230972d.
Durchlaufe ich nun diese beiden Funktionen dann macht mir die Funktion auf dem oben genannten Namen folgendes:

Aus: 5e06319eda06f020e43594a9c230972d
Wird: 5e0639eda06f020e43594a9c230972d

Kann mir zufällig einer erklären warum er mir eine 1 unterschlägt
5e06319...

Würde mich über eine schnelle Hilfe freuen...

Gruß Dennis
 
Zuletzt bearbeitet:
Hast du per Zufall im Parameter $clear eine 1 oder true drin? true wird im str_replace als 1 interpretiert und du hast ja die folgende Zeile die alsor true durch '' ersetzt
PHP:
$path = trim(str_replace($clear, '', $path), DS);
 
Hast du per Zufall im Parameter $clear eine 1 drin?

Nein das geht leider nicht, ich benutze $clear für den Aufruf der Funktion getTree und dann übergebe ich die Variable nur noch an die rekursive Funktion und ändere daran nichts mehr. Aber daran habe ich auch schon gedacht. ;-)
 
Zuletzt bearbeitet:
wie schoni geschrieben ist nicht möglich hier die var_dump Ausgabe :-)

string(30) "/var/www_test/public_html/media"

Also daran liegt es nicht.
 
Du siehst, dass dir einfahc mal nur eine 1 entfernt wird. 1=true -> protokolliere doch einfach die Variablenbelegung bei den Aufrufen. Versuch es doch mit Exceptions und dann den/die Trace ausgeben.
 
Bisschen debuggen und schnelle hat man die Lösung
PHP:
$path = trim(str_replace($dump[0], '', $path), DS);
Da ersetzt du alle Vorkomnisse des Aktuellen Ordnernamens mit ''. Du hast auch ein Ordnername '1'. Beim Wegersetzen dieses Namens wird auch die 1 in '5e06319eda06f020e43594a9c230972d' gelöscht.

Ersetze es durch so etwas...
PHP:
            preg_match("/^{$dump[0]}\/(.*)$/", $path, $results);
            $path = $results[1];
 
Zuletzt bearbeitet:
perfekt danke...
die untere Zeile habe ich total ausser Sicht gelassen, kein wunder das es nicht geht.

Mensch manchmal kann ich aber auch richtig blind sein....
 
Zurück