CnC Foren

CnC Foren (http://www.cncforen.de/index.php)
-   Tech-Support / Tech-Talk (http://www.cncforen.de/forumdisplay.php?f=26)
-   -   PHP: Bestimmte Stelle in Textdatei suchen und ab dort lesen.... (http://www.cncforen.de/showthread.php?t=50549)

Sven 20-10-2004 13:01

PHP: Bestimmte Stelle in Textdatei suchen und ab dort lesen....
 
Ich versuch mich ein wenig daran ein dynamisches Menü aus einer .txt zu lesen und so...
Hier das, was ich habe:
PHP-Code:

<?
$fp=fopen("links.txt","r");
  
while($line=fgets($fp,1024)) {
    $arr=explode("|",$line);
    $url=$SCRIPT_NAME;

    $testvar=get_caller($url);
    if($testvar==$arr[0]) {
        echo "<a href=".$arr[0]."><b>".$arr[1]."</b></a>";
        echo "<br />";
    }
    else {
        echo "<a href=".$arr[0]."><i>".$arr[1]."</i></a>";
        echo "<br />";
    }



fclose($fp);

function get_caller($url) {
    $lastpos=strrpos($url,"/")+1;
    $caller=substr($url,$lastpos);
    return $caller;
}

?>

Inhalt der .txt:
Code:

index.php|Index
test.php|Test

Nun möchte ich gerne Untermenüs ermöglichen, sprich die Textdatei könnte so aussehen:
Code:

[Haupt]
index.php|Index|Unter
test.php|Test|-
[Unter]
unter.php|Unter

Es soll also, wenn in $arr[2] 'Unter' erscheint, festgesetzt werden daß es für diesen Link einen untergeordneten Link gibt und dieser soll dann entsprechend dargestellt werden.
Ich müsste also zunächst die Datei öffnen und nach [Haupt] suchen und dann alles in diesem Abschnitt bis [Unter] einlesen.
Ist dann für einen Fall gegeben daß es einen untergeordneten Link gibt ($arr[2]=="Unter"), so soll alles, was im Abschnitt [Unter] steht eingelesen und dargestellt werden.

Wie mach ich das?

se7en 20-10-2004 14:47

vielleicht hilft Dir meine Idee ;) Ich würde es mir einfacher machen mit einer anderen Datenstruktur:

Code:

index.php|Index
unter1.php|Index|Unter1
unter2.php|Index|Unter2
test.php|Test|-
thema3.php|Thema3
unter3.php|Thema3|Unter3
unter4.php|Thema3|Unter4

hilft das?

Sven 20-10-2004 15:14

Ja, das war die Möglichkeit die mir auch vorschwebte wenn ich nix anderes finde ;)

maxl 20-10-2004 15:25

Ich kenne mich mit PHP leider nicht besonders gut aus, weil ich Perl bevorzuge, aber ich versuche dennoch zu helfen.

Ich würde die Textdatei einfach Zeile für Zeile in einen assoziativen Array (Hash) einlesen, der in etwa diese Struktur hat:
$hash[Kategorie][Name]
Der Wert ist dann eine Referenz auf eine andere Hashtabelle, die die Werte URI und Kategorie enthält. URI ist ein Skalar und Kategorie ist eine Referenz auf $hash[Unterkategorie].

Um die Textdatei auszulesen, kannst du einfach for dem while eine Variable $aktuelle_kategorie initieren. Falls die Zeile dann das Format [(.*)] hat, dann setzt du $aktuelle_kategorie auf den Wert zwischen den Klammern ($1?).
Dann solltest du die einzelnen Zeilen den Kategorien zuordnen können.

Auf diesem Weg kannst du das Menü recht leicht ausgeben lassen. Du könntest eine function schreiben, die mit der Kategorie 'Haupt' beginnt, dann den Schlüssel des Hash und die URI ausgibt und falls die Kategorie gesetzt ist, und auch angezeigt werden soll, ruft sich diese function rekursiv auf.

Edit:
Das ist nur eine Möglichkeit, wie man es in Perl realisieren könnte, mit den Mitteln, von denen ich weiß, dass sie in PHP auch existieren sollten. Es gibt sowohl für Perl als auch für PHP vermutlich ellegantere Möglichkeiten. ;)


Alle Zeitangaben in WEZ +2. Es ist jetzt 17:52 Uhr.

Powered by vBulletin Version 3.7.3 (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.