phpbar.de logo

Mailinglisten-Archive

[php] Datei einlesen und als Array speichern

[php] Datei einlesen und als Array speichern

Frank Liebelt frank.liebelt at i-netsales.biz
Don Mar 24 09:26:48 CET 2005


Hallo und guten Morgen!

Ich sitze nun seit zwei Stunden mit übermüdeten Augen vor folgendem Problem.

Ich möchte eine Datei, in meinem Fall eine Kategorienliste von PhpAuction,
einlesen und als mehrdimensionales Array speichern.
Die Datei selbst ist so aufgebaut.

1 at Hauptkategorie
2 at Unterkategorie
3 at Unterkategorie von Unterkategorie
4 at Unterkategorie von Unterkategorie von Unterkategorie
1 at Hauptkategorie
2 at Unterkategorie
3 at Unterkategorie von Unterkategorie

u.s.w

Ich gehe nun hin und lese die Datei Zeile für Zeile ein.

Mit:
$entry = fgets($import, 4096);
$level = substr($entry, 0, 1);
$value = substr($entry, 2, strlen($entry));

Prüfe ich nun welchen Level die aktuelle Zeile hat.
$value enthält dann den Kategorienamen.

Funktioniert soweit auch wuderbar.

Nun kommt die Sache mit dem Erzeugen des Arrays.

Wenn Level nun eine 1 ist speicher ich den Wert (value) folgendermassen.
$arr_KatMain[$l1c] = $value;
Damit sollte in $arr_kat[0] z.B. Auto stehen.

Nun lautet die zweite Zeile der Datei: 2 at BMW
Das dieser Eintrag zur Kategorie 1 gehört wollte ich das mit:
$arr_KatMain[$l1c][$l2c] = $value; machen und bin davon ausgegangen, dass
dies so funktioniert.

Das Ganze als Code sieht so aus:

 $debug    = true;
 $l1c      = -1;
         
 $str_ErrOpen = 'Fehler: Kategoriendatei konnte nicht geöffnet werden!';
 $arr_KatMain = array();
 
 $import = fopen('./categories.txt', 'r') or die($str_ErrOpen);

 while(!feof($import))
 {
 	$entry = fgets($import, 4096);
      $level = substr($entry, 0, 1);

   	$value = substr($entry, 2, strlen($entry));
   	$value = str_replace("\n", "", $value);

   	if ($debug) print $level . " " . $value . "<br />\n";
 	if ($level == 1)
 	{
 		$l2c = -1;
 		$l3c = -1;
 		$l4c = -1;
 		$l5c = -1;
 		$l6c = -1;
 		$l7c = -1;
 		$l1c++;
        $arr_KatMain[$l1c] = $value;
 	}
    if ($level == 2)
    {
    	$l2c++;
    	$arr_KatMain[$l1c][$l2c] = $value;
    }
    if ($level == 3)
    {
    	$l3c++;
    	$arr_KatMain[$l1c][$l2c][$l3c] = $value;
    }
    if ($level == 4)
    {
    	$l4c++;
    	$arr_KatMain[$l1c][$l2c][$l3c][$l4c] = $value;
    }
    if ($level == 5)
    {
    	$l5c++;
    	$arr_KatMain[$l1c][$l2c][$l3c][$l4c][$l5c] = $value;
    }
    if ($level == 6)
    {
    	$l6c++;
    	$arr_KatMain[$l1c][$l2c][$l3c][$l4c][$l5c][$l6c] = $value;
    }
    if ($level == 7)
    {
    	$l7c++;
    	$arr_KatMain[$l1c][$l2c][$l3c][$l4c][$l5c][$l6c][$l7c] = $value;
    }
 }

fclose($import);

Das Ergebnis:

Es sind insgesamt 32 Hauptkategorien und etliche Unterkategorien in der
Datei.
Die Ausgabe sieht folgend aus: (Das einzige was stimmt ist der Arraycount)

Array
(
    [0] => AAAAAAHDDFGGGHHIJKKMMMMNPPPVRSTTKM
    [1] => BCDHHKKLLMMTWPRRSSVWZF
    [2] => BBBBBBBSKBKAS
    [3] => AGGHKKKMMMMPPSWZt
    [4] => VDÖSEIMVGZn
    [5] => BHEKKNRSCSSZSWriften
    [6] => PBro-Schreibwaren
    [7] => ABDDGGGHIKKLLLMMTSSS
    [8] => ACCCCDDEFFGGKKKMMMMMNNNPRSFS
    [9] => AABBCFFFKKNSTWWZ
    [10] => DVFFTWideo
    [11] => CCDDDFFFKKLMOOOPPSSF
    [12] => BGKKKKKSSSSWäte
    [13] => ABBEEEFGGHIKLMRSSUWWW
    [14] => WGIAGilien
    [15] => DDDDDHHHKKMHKssoires
    [16] => MMMMSRRWu
    [17] => HSHPHPPATIFTFTion
    [18] => ABBDDGHHKKKKLMMMRSSSTTW
    [19] => MMMMMMMMMMMMMEPPH
    [20] => CCCCCCCCCCCCVVVVVVVVVVVSHFPT
    [21] => BDDEEGSLTZSNente
    [22] => KPZILMSospiele
    [23] => KBUGFTUFBBMRRLRR
    [24] => AABCDDeEFFFFHMMMPPRRRSSSSTTTTTTÜVWW
    [25] => ABBFKLMOPPSTS
    [26] => ABBBBEFGHKKLLKMPPSSSSSSTS
    [27] => AFFGBBCFFIJRRSSWWTWSFP
    [28] => KKSGets
    [29] => FHKKPRVS
    [30] => DDDDEFFFGLPRSSVVWZF
    [31] => LNKMWKSMUEGHHPPSSTWEMPFLZJ
)

Ich hoffe, das war einigermassen verständlich und jemand kann helfen!


Mit freundlichen Grüßen

Frank Liebelt


php::bar PHP Wiki   -   Listenarchive