TXT-CSV in Array einlesen

Markus Müller

Grünschnabel
Hallo,
ich bin neu hier... ich mache gerade ein Projekt mit PHP...
Jetzt hab ich allerdings ein Problem...
Ich möchte eine TXT Datei in Array einlesen und die Daten in verschiedene Auswahlfelder ausgeben.
So die TXT sieht so aus:
F;10;Markus;0
M;2;Mitarbeiter 1...
M;3;Mitarbeiter 2...
P;2;BV Projekt 1
A;Material für BV Projekt 1
A;Material für BV Projekt 1
A;Material für BV Projekt 1
P;10015;Projekt 2....;

usw.. könnt ihr mir helfen?
 
Hallo,

ich kann es mal versuchen. In PHP gibt es diese grandiose Funktion fgetcsv(). Mit dieser kannst du eine bereits geöffnete Datei (mittels fopen()) als CSV-Daten einlesen.

Hier ein Beispiel:

PHP:
$fp = fopen("dateiname.csv", "r");
if( !$fp )
{
  die("Datei konnte nicht geöffnet werden!");
}

$csv_daten = array();
$anzahl_zeile = 0;
while( ($csv_daten[$anzahl_zeilen] = fgetcsv($fp, 0, ";")) != FALSE )
{
  var_dump($csv_daten[$anzahl_zeilen]);
  $anzahl_zeilen++;
}

Im PHP-Manual zu fgetcsv() gibts noch Beispiele und evtl. noch Erklärungen, auf die ich hier nicht eingehen möchte.
 
okay, das funktioniert. nur leider weis ich nicht so richtig weiter mit dem Array. Ein Array ist ja ein Feld wo man werte speichern kann, theoretisch müsste ich ja in dem Feld wie eine Überschrift machen mit dem name der Baustelle und diese muss dann die Werte mit dem A davor bekommen, das gleiche bei der nächsten Baustelle. Hm ich hab leider null plan von Arrays :(
 
nja eher so: Baustelle als Dropdown Feld und das dazugehörige Material als Dropdownfeld sowie Mitarbeiter als Dropdown, das ich das dann auswählen kann und später abschicken :) weist du wie ich meine?
 
Ich hab das Format der CSV-Datei nicht verstanden, daher ist es auch etwas schwierig, hier eine Hilfestellung zu geben. Was bedeuten die einzelnen Werte denn genau?
 
hm die ist auch nicht von mir erstellt, also ich Versuchs nochmal:

F;10;Markus;0 // das ist unbedeutend
K;1;Boden // K für Kommentar, 1 für Nummer (dieser Wert wird benötigt), Boden --> für Wert 1
K;2;Wand
M;2;Max MusterMann //M für Mitarbeiter, 2 Nummer des Arbeiters, Name für ihn (für Nummer)
M;5;Markus Müller
T;120;Trockenbau //T für Tätigkeit, 120 Nummer für Trockenbau
P;10287;BV Test; //P für Projekt, Numer, Name der Baustelle
A;B051000030100;Gel-Lasur 510;ltr;10287 // Material für Baustelle Test
A;S00269-023;StoSilco Color G getönt;L;10287 // Material für Baustelle Test
A;S00518-002;StoPrim Plex;L;10287 // Material für Baustelle Test
P;999;BV Test2; //P für Projekt, Numer, Name der Baustelle
A;B051000030100;Gel-Lasur 510;ltr;999 // Material für Baustelle Test2
A;S00269-023;StoSilco Color G getönt;L;999 // Material für Baustelle Test2
A;S00518-002;StoPrim Plex;L;999 // Material für Baustelle Test2

Erst steht immer was gemeint ist ( A für Artikel, M für Mitarbeiter, P für Projekt, dann die Nummer (die bräuchte ich dann im Prinzip) dann der Name --> Diese soll später angezeigt werden mit der hinterlegten Nummer... Die Artikel werden immer der Baustelle zugeordnet, siehe Nummer am ende des Artikels
 
PHP:
<?$anzahl_spalten = 5; 
$trennzeichen = ";";




$array = file($datei); 
        
        foreach ($array as $num => $element)
        {

                        $array[$num] = explode($trennzeichen, $element);
                }

$ende=count($array);
 echo("<select>");

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



 for($spalte=0;$spalte<$anzahl_spalten;$spalte++) { ?>


  <option value="<?=$array[$i][1]?>"><?=$array[$i][2]?></option>




<?php } 



 } 
  echo("</select>");
 ?>


</table>

leider läuft das noch nicht so ganz....
 
Zuletzt bearbeitet:
ich hätte auch ne Idee wie ich das material den Baustellen zuordnen... ich müsse einfach blos ne abfrage machen if Array spalte 5 == Array spalte 3 ... usw... nur an der Umsetzung scheiterst leider... bitte vlt hat ja jemand die Idee :)
 
Schau mal hier, das kam beim Rumspielen mit den Daten raus:
PHP:
<?php
header("Content-Type: text/html; charset=utf-8");

$filename = "daten.csv";

$artikel = array();
$mitarbeiter = array();
$taetigkeiten = array();
$projekte = array();
$kommentare = array();

$fp = fopen($filename, "r");
while( ($csv = fgetcsv($fp, null, ';') ) != false )
{
	switch($csv[0])
	{
		case 'F': 
			// unbedeutend
			break;
			
		case 'K':
			$kommentare[$csv[1]] = $csv[2];
			break;
			
		case 'M':
			$mitarbeiter[$csv[1]] = $csv[2];
			break;
			
		case 'T':
			$taetigkeiten[$csv[1]] = $csv[2];
			break;
			
		case 'P':
			$projekte[$csv[1]] = $csv[2];
			break;
			
		case 'A':
			$artikel[] = array('artikelnummer' => $csv[1], 'artikelname' => $csv[2], 'projekt' => $csv[4]);
			break;
						
	}
}

echo "Artikel:<br/>";
echo "<pre>";
var_dump($artikel);
echo "</pre>";

echo "Mitarbeiter:<br/>";
echo "<pre>";
var_dump($mitarbeiter);
echo "</pre>";

echo "Projekte:<br/>";
echo "<pre>";
var_dump($projekte);
echo "</pre>";

echo "Tätigkeiten:<br/>";
echo "<pre>";
var_dump($taetigkeiten);
echo "</pre>";
?>

Das ist das Resultat:

Code:
Artikel:

array(6) {
  [0]=>
  array(3) {
    ["artikelnummer"]=>
    string(13) "B051000030100"
    ["artikelname"]=>
    string(13) "Gel-Lasur 510"
    ["projekt"]=>
    string(5) "10287"
  }
  [1]=>
  array(3) {
    ["artikelnummer"]=>
    string(10) "S00269-023"
    ["artikelname"]=>
    string(24) "StoSilco Color G getönt"
    ["projekt"]=>
    string(5) "10287"
  }
  [2]=>
  array(3) {
    ["artikelnummer"]=>
    string(10) "S00518-002"
    ["artikelname"]=>
    string(12) "StoPrim Plex"
    ["projekt"]=>
    string(5) "10287"
  }
  [3]=>
  array(3) {
    ["artikelnummer"]=>
    string(13) "B051000030100"
    ["artikelname"]=>
    string(13) "Gel-Lasur 510"
    ["projekt"]=>
    string(3) "999"
  }
  [4]=>
  array(3) {
    ["artikelnummer"]=>
    string(10) "S00269-023"
    ["artikelname"]=>
    string(24) "StoSilco Color G getönt"
    ["projekt"]=>
    string(3) "999"
  }
  [5]=>
  array(3) {
    ["artikelnummer"]=>
    string(10) "S00518-002"
    ["artikelname"]=>
    string(12) "StoPrim Plex"
    ["projekt"]=>
    string(3) "999"
  }
}

Mitarbeiter:

array(2) {
  [2]=>
  string(14) "Max MusterMann"
  [5]=>
  string(14) "Markus Müller"
}

Projekte:

array(2) {
  [10287]=>
  string(7) "BV Test"
  [999]=>
  string(8) "BV Test2"
}

Tätigkeiten:

array(1) {
  [120]=>
  string(10) "Trockenbau"
}
 
Zuletzt bearbeitet:
Zurück