ubuntuusers.de

PHP Assoziative Array füllen

Status: Gelöst | Ubuntu-Version: Nicht spezifiziert
Antworten |

Newbiew

Anmeldungsdatum:
11. Mai 2009

Beiträge: 23

Hallo, Ich habe ein Problem und zwar will ich ein Assoziatives Array erstellen. Dort sollen Daten gespeichert werden die ich vorher aus einer txt-Datei gelesen habe , aber ich weiß nicht wie ich den string teilen muss bzw. bearbeiten muss um das in mein Array zu bekommen. Ich mach mal ein Beispiel damit es verständlicher wird. In der Txt-Datei steht rootDirector=/home/User/Upload/ TestDirectory=/home/User/Test/ und jetzt soll das eingelesen werden in ein array das zum beispiel so aussieht:$pfad["rootDirectory"]="/home/User/Upload/"; und $pfad["TestDirectory"]="/home/User/Test/"; achja und die Textdatei kann verändert werden also es können noch mehrere dazu kommen aber auch welche gelöscht werden. Ich hoffe einer von euch versteht mein Problem und kann mir helfen schon mal vielen Dank!!

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
$fp = fopen("Parameterdatei.txt",r);
if(isset($fp))
{
$str="";
while(!feof($fp))
{
$text =fgets($fp);
$str.= $text;
}
  
fclose($fp);
}

jahb

Anmeldungsdatum:
10. April 2008

Beiträge: 238

Wohnort: Reinfeld

Ich würde den eingelesenen String mit explode bei dem = trennen, das ganze in ein array schreiben und danach das assoziative Array bauen!

Ungefähr, ungetestet, so:

1
2
3
  $gelesenes = "rootDirector=/home/User/Upload/";
  $array = explode("=", $gelesenes);
  $assarray[$array[0]] = $array[1];

Und wenn du das array leerst und die Datei jedes Mal neu einliest gibt es ja keine obsoleten oder verstehe ich dich falsch?

gruß Simon

Newbiew

(Themenstarter)

Anmeldungsdatum:
11. Mai 2009

Beiträge: 23

Hi, erstmal danke ich werde das mal ausprobieren nur weiß ich nicht ob das mit der Lösung so klappt weil ich will das assoziative array dann so aufrufen können das ich wenn ich $assarray["rootDirectory"] den pfad ausgegeben bekomme und wenn ich deine Lösung sehe frage ich mich gerade ob ich nicht um den Pfad von rootDirectory zu bekommen bei dir $assarray["0"] eingeben muss...naja ich probiers mal aus und melde mich dann Danke ☺

jahb

Anmeldungsdatum:
10. April 2008

Beiträge: 238

Wohnort: Reinfeld

Eigentlich nicht!

Mit dem Explode teile ich den String beim = und packe ihn in ein normales Array. $array[0] ist dann "rootDirector" und $array[1] ist "/home/User/Upload/"

Somit sollte dann $assarray[$array[0]] $assarray["rootDirector"] sein.

Es kann natürlich gut sein, dass du das noch irgendwie substituieren musst. Da bin ich gerade nicht ganz sicher (Hab PHP lange nicht mehr angefasst) aber funktionieren sollte diese Methode in jedem Fall

Newbiew

(Themenstarter)

Anmeldungsdatum:
11. Mai 2009

Beiträge: 23

Super Danke klappt jetzt wunderbar ☺ Nochmal Danke Ich poste mal den code falls jemand auch so ein Problem hat

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
fp = fopen("Parameterdatei.txt",r);
$str="";
while(!feof($fp))
{
$text =fgets($fp);
$str.=$text;
}

$datei=file("Parameterdatei.txt");
$datei2=count($datei);
for($i="0";$i<$datei2;$i++)
{
	$gelesenes = $datei[$i];
	$array = explode("=", $gelesenes);
	$assarray[$array[0]] = $array[1];
}
print_r($assarray["rootDirectory"]);  
fclose($fp);

Lysander

Avatar von Lysander

Anmeldungsdatum:
30. Juli 2008

Beiträge: 2669

Wohnort: Hamburg

Wobei ich mir hier die Frage stelle: Was ist das für ein Format? Ist das selbst ausgedacht / beeinflussbar? Wenn ja, würd eich auf ein Standardformat wechseln (INI, JSON, XML, ...) und mit einen fertigen Parser suchen, der so etwas erledigt.

xabbuh Team-Icon

Anmeldungsdatum:
25. Mai 2006

Beiträge: 6411

Dein Skript hat so oder so noch ein paar Mängel:

1. Zeile 1: Hier fehlt das Dollarzeichen, damit der Interpreter fp auch als Variable interpretiert.

2. Warum öffnest du die Datei zwei Mal? Die Zeilen 1 bis 7 scheinen mir völlig überflüssig zu sein.

Antworten |