Wer ist schlau?

mr.knowledge

Grünschnabel
Grüße,

hab ma ne Frage:

Ich hol mir aus ner DB (MySQL) eine Verzeichnisstruktur
zum Bsp.

abc/
abc/def/
abc/def/ghi

jkl/
jkl/mno/
jkl/mno/pqr

Jetzt solls mir das auslesen, was root is und was darunter liegt, also:

abc
-def
-ghi

jkl
-mno
-pqr

Ich hab Versucht mit ereg die Slashes rauszupacken $slash=ereg("[/]",$row[0]);

Und das dann zu verarbeiten in ner Schleife. Wer hat dazu ne Idee?
Es soll dynamisch schaun, wie weit das verzweigt ist und das ausgeben


Und jetzt nochma einfacher erklärt :-)

CREATE TABLE structure (
id int not null auto_increment primary key,
level int,
directory char(30),
name_eng char(30),
name_ger char(30),
description_eng char(30),
description_ger char(30),
fs_page int);


Beispieldatensatz

ID level directory name_eng name_ger
description_eng description_ger fs_page
1 0 about-us/
2 1 about-us/profile/
3 2 about-us/profile/test/
4 1 about-us/contact


Baumdiagramm sollte so aussehen: (Bzw. der Text, der in dem Feld description
steht)

about us
-profile -------
|-----test
-contact -------

Statt Striche Einrückungen mit <td>
Egal an welcher Stelle was in der Datenbank eingetragen wird, der Eintrag
muß korrekt zugeordnet werden, ID 4 "contact" gehört zur top-level about us.
 
nimm halt einfach alles mit explode("/",$string); auseinander.

dann mach dir einfach eine for schleife.
 
PHP:
$dir[0]/a
$dir[1]/a/1
$dir[2]/a/1/2

foreach($dir as $val)
{
  $exDir = explode($dir,"/");
    foreach($exDir as $k => $v)
    {
      if($k==0)
             $newDirArr[0] = $v;
      $last=$v;
      if(isset($last))
           if(in_array($last,$newArray))
                $newArray[$i][$a] = $v;
           else
      if(in_array($last,$newArray[$i]))
           $newArray[$i][$a][$e] = $v;
 
    }
}

Der Code läuft nicht da ich den im Forum geschrieben habe und nicht auch gar nichts getestet habe.
bzw die $i, $a, $e usw gar nicht incremented habe.

Aber soll nur einen weg aufzeigen.
Punkt ist :
Du explodest den String am /
Das erhaltene Array testest du ob elemente schon in deinem neuen Array vorkommen.
Wenn nicht schreibst du das in der hirachy rein. Wenn nach diesem Part des erhaltenem arrays weitere elemente bestehen heisst das sowas wie da ist ein neues unterverzeichnis das bedeuted für dich ein neues array an das array anzufügen usw.

wenn das richtig läuft :
dann hast du also für das beispiel

/home
/home/quentin
/home/holyfly/pics
/home/holyfyl/docs

ein array in der form

dir[][][]

und kannst dies gezielt mit foreach aufrufen.

Sprich /home/holyfly/pics
ist
dir[0][1][1]
 
Danke erstmal...

Hab versucht deinen Code umzuformen, so das es funzt. Bekomme es zwar leider nicht hin, naja, kann man nichts machen.

Danke trotzdem...

Mit bestem Gruß...


P.S. Wenn noch jemand ne Idee hat, oder es macht :-), kann er ruhig posten...
 
nicht gleich aufgeben :-)

das funktioniert.
Ich habe das mal so programmiert nur finde ich den quellcode nicht mehr.

Es war genau das selbe: Ging darum ne verzeichnisstruktur graphisch darzustellen.

Vom Prinzip war das in etwa so :) natürlich hatte ich das andere getestet und gedebuggt und das ist nur die extrem roh version :-)
 
Habs nochma versucht hier mein Code

Aber der zeigt immer noch nicht so ganz korrekt an, was nun root ist und was sub. Ich versuchs ja schon zwischenzuspeichern, aber es geht net :-(

<?


include("connect_database.php"); // Bindet Script ein, um DB zu öffnen



function wieviel_datensätze($tabelle,$con)
{
$i=0;
$query="SELECT id FROM $tabelle";
$sql=mysql_query($query,$con);
while($entry=mysql_fetch_array($sql,MYSQL_ASSOC))
{
$i++;

}
return $i;
}


function gib_directory_zurueck($tabelle,$con)
{
$query="SELECT directory FROM $tabelle ORDER BY directory";
$sql=mysql_query($query,$con);
while($entry=mysql_fetch_row($sql))
{
$result[]=$entry[0];

}
return $result;
}

$ds=wieviel_datensätze("structure",$connect);
$dr=gib_directory_zurueck("structure",$connect);



for($i=0;$i<=$ds;$i++)
{


$check=substr_count($dr[$i],"/");

if($check<2)
{


$root_directory=$dr[$i];


} // If Schleife root

else {


$sub_check=substr_count($dr[$i],$root_directory);

$sub_check2=substr_count($dr[$i],"/");

} // else Schleife root

if($sub_check<2 and $sub_check2<3)
{

$sub_directory[$i]=$dr[$i];

}

else {


$sub_sub_check=substr_count($dr[$i],$sub_directory);

$sub_sub_check2=substr_count($dr[$i],"/");

}


if($sub_sub_check<3 and $sub_check2<4)
{

$sub_sub_directory[$i]=$dr[$i];
echo $sub_sub_directory[$i]."<br><br>";
}








} // for Schleife







?>
 
Zurück