Textdatei auslesen per PHP

flippar

Grünschnabel
Hallo ich brauche Hilfe bei folgendem Problem:

Ich möchte mehrere Textdateien mit einem Script auslesen .

Die Textdateien Sind Immer folgendermaßen aufgebaut:

LINKSA:
LinksA1
LinksA2
LinksA3

LINKSB
LinksB1
LinksB2
LinksB3

LINKSC
LinksC1
LinksC2
LinksC3

LINKSD
LinksD1
LinksD2
LinksD3

Ich möchte diese nun so auslesen dass ich quasi jedesmal den 1./2./3. Link in einem Array habe
und diese dann per Echo ausgeben kann.

Also echo : Blabla $LinksA[0] blubb blubb $LinksB[0] bli bla blu $LinksC[0] und $LinksD[0]

Ich habe leider große Probleme mit dem explode und komme da auf keinen Grünen Zweig.

Besonderheit ist noch, dass die Anzahl der Links je nach Txt Datei variiert. Also es je nach Textdatei auch mal bis LinksA20 gehen kann.


Wäre über Hilfe dankbar. Bin verzweifelt :(
 
Ja genau. Nur es sind nicht immer 3 Links. Das sollte über eine kleine Veränderung im Skript halt anpassbar sein.
LinksA , LinksB etc. haben aber immer die gleiche Anzahl an Unterpunkten ( hier halt 3)
 
Nachdem Du die Datei eingelesen hast.. Wonach suchst Du denn, um die Einträge zu unterscheiden? ich würde dem Trenner/der Überschrift etwas Eindeutiges geben, zB zwei Rauten am Anfang, damit wir für den Code einen sinnvollen Unterscheider geben können für

(A) das ist ne Überschrift
(B) hier beginnt ein neues Array

Beispiel-Textdatei
Code:
##LINKSA
www.phreekz.de
www.dslr-kleinanzeigen.de
www.xbmc.org
##LINKSB
www.google.de
www.tutorials.de
##LINKSC
www.fotografie.de
www.cinema.de
www.coding.de
Interessant ist, mit welchem Texteditor die Textdatei geschrieben wurde, ist das Zeilenende (besser Zeilenumbruch) mit \n oder mit \r\n gesetzt? Sollte man diese noch löschen?
PHP:
<?php
$array = file("/textdatei.txt");

$linkarray=array();
$index=-1;

foreach($array as $row)
{
  if(strpos($row,"##")!=0)
  {
    $index++;
    $linkarray[$index]=array();
    $linkarray[$index][0]=$row;
    $linkarray[$index][1]=array();
  }
  else
  {
    $linkarray[$index][1][]=$row;
  }  
}

var_dump($linkarray);
Leerzeichen betrachte ich nicht und das Wegnehmen der Rauten für eine "schönen" Trennertitel genauso wenig (auch nicht das Wegkürzen der Zeilenumbrüche), das kannst Du selbst einbauen ;) UND der Code ist jetzt ohne Test hingekritzelt - es könnten Fehler drin sein..

mfg chmee
 
Zuletzt bearbeitet:
Das sollte so funktionieren:
PHP:
if(strpos($row,"##") ==0)

Wenn nicht, beantworte noch folgende Fragen:
Wie sieht denn deine Textdatei aus? Ist sie im richtigen Verzeichnis?
 
In diesem Fall muss es sogar typensicher sein, denn kein Fund würde auch als 0 oder false interpretiert werden, somit also
PHP:
strpos($row,"##")===0

(und der Dateiname muß entweder ohne slash oder mit ./ angegeben sein. sorry.)
mfg chmee
 
PHP:
array(11) { [0]=> array(2) { [0]=> string(9) "##LINKSA " [1]=> array(0) { } } [1]=> array(2) { [0]=> string(15) "www.phreekz.de " [1]=> array(0) { } } [2]=> array(2) { [0]=> string(26) "www.dslr-kleinanzeigen.de " [1]=> array(0) { } } [3]=> array(2) { [0]=> string(13) "www.xbmc.org " [1]=> array(0) { } } [4]=> array(2) { [0]=> string(9) "##LINKSB " [1]=> array(0) { } } [5]=> array(2) { [0]=> string(14) "www.google.de " [1]=> array(0) { } } [6]=> array(2) { [0]=> string(17) "www.tutorials.de " [1]=> array(0) { } } [7]=> array(2) { [0]=> string(9) "##LINKSC " [1]=> array(0) { } } [8]=> array(2) { [0]=> string(18) "www.fotografie.de " [1]=> array(0) { } } [9]=> array(2) { [0]=> string(14) "www.cinema.de " [1]=> array(0) { } } [10]=> array(2) { [0]=> string(13) "www.coding.de" [1]=> array(0) { } } }

Das ist jetzt das Ergebnis und leider immer noch nicht was ich möchte.
Die Textdatei sieht so aus wie oben im vorigen Code-Post beschrieben.
 
PHP Nimmt es mit den Arraydeklarationen nicht so genau @chmee.
Daher geht auch folgendes (erspart einem die leeren Arrayeinträge):

PHP:
<?php
$array = file("/textdatei.txt");

$linkarray = array(); //auch nicht nötig, aber gehört zu schönem programmierstil dazu, finde ich
$index=-1;

foreach($array as $row)
{
  if(strpos($row,"##") === 0)
  {
    $index++;
    $linkarray[$index][0]=$row;
  }
  else
  {
    $linkarray[$index][1][]=$row;
  }  
}

Wo ist denn jetzt dein Problem?
Du hast doch alles in dem Array was du brauchst. Du kannst es sogar direkt in der Schleife ausgeben lassen.
 
Zuletzt bearbeitet:
Wie Du es möchtest, kannst Du Dir selbst zusammencoden. Wir haben Dir ein simples und funktionierendes Beispiel gebracht. Wir sind aber nicht dazu da, Wünsche zu befolgen ;) Hilfe zur Selbsthilfe!

mfg chmee
 

Neue Beiträge

Zurück