PHP Werte aus CSV mit foreach zuordnen

leadclown

Captain
Registriert
Apr. 2004
Beiträge
3.703
hallo,

es geht mir um folgendes...

ich habe mit excel eine csv erstellt, diese hat 2 spalten mit sagen wir je 10 zeilen.

nun möchte ich diese csv in meiner php datei einbinden und die werte der 2. spalte denen der ersten zuordnen, sprich...

wenn... wert (zeile 1) der spalte 1, dann wert (zeile 1) der spalte 2
wenn... wert (zeile 2) der spalte 1, dann wert (zeile 2) der spalte 2
wenn... wert (zeile 3) der spalte 1, dann wert (zeile 3) der spalte 2

naja, und so weiter. das ganze aber mit foreach weil das wohl am besten gehen soll.

zuerst hatte ich es wie folgt gelöst (ohne csv):

if ($variable == wert_zeile1_spalte1) {
$variable2 = wert_zeile1_spalte2;
}
if else ($variable == wert_zeile2_spalte1) {
$variable2 = wert_zeile2_spalte2;
}
if else ($variable == wert_zeile3_spalte1) {
$variable2 = wert_zeile3_spalte2;
}
...

das ist natürlich ziemlich umständlich wenn mal werte hinzukommen oder geändert werden müssen. daher möchte ich das nun mit einer csv und einer foreach schleife lösen.

ich hoffe die sache ist einigermaßen verständlich.

kann mir jemand dabei zur hand gehen?

mfg
 
Hi,
ich würde dir gerne helfen, jedoch verstehe ich leider nicht was genau du möchtest.
Wenn ich das jetzt "richtig" verstehen würde, bräuchtest du keine Tabelle.
Du möchtest also die Werte der Spalte 1 mit den Werten der Spalte 2 (auf selber Zeile) überschreiben... Irgendwo glaube ich ist da etwas falsch :freak:

Ich glaube es wäre hilfreicher wenn du mir/uns anhand eines Beispieles erklären würdest, was genau du versuchst zu programmieren.

mfg Michael
 
Du möchtest einfach den Wert der zweiten Spalte in die erste Spalte einfügen und das für jede Zeile?

PHP:
$file = @fopen("file.csv", "r+");

while(($data = fgetcsv($file, 1000, ";")) !== false)
{
    $data[0] = $data[1];
}

fclose($file);

Achte auf die Parameter der fgetcsv-Funktion.
 
ok, dann versuche ich das nochmal deutlicher zu erklären.

also,

ich habe eine csv mit 2 spalten und je 5 zeilen.

spalte 1 mit den werten 1, 2, 3, 4, 5
spalte 2 mit den werten 100, 200, 300, 400, 500

die werte der ersten spalte werden über ein formular eingegeben.

wenn nun also eine 1 im formularfeld eingegeben wird, soll die 100 in eine variable geschrieben und an anderer stelle ausgegeben werden.

wenn die 2 im formular ausgewählt wird, soll wiederum die 200 in die variable geschrieben werden usw.

erst hatte ich das ganze wie gesagt mit if gelöst und die werte in den quelltext geschrieben...

if ($formularfeld == 1) {
$variable = 100;
}
else if ($formularfeld == 2) {
$variable = 200;
}
usw.

nun stellt euch vor, das geht nicht von 1-5 sondern von 1-10.000 :freak:
deswegen soll es nun mit csv und foreach gelöst werden.

sry, aber deutlicher wüsste ich mich jetzt nicht auszudrücken :)
 
Also wenn der Wert immer mit 100 multipliziert wird, dann reicht doch eine Zeile Code dafür aus. Und zwar mulitplizierst du die Eingabe mit 100.
 
die werte sind nur beispiele, so einfach ist es dann nämlich doch nicht...

ich fürchte wir kommen so nicht weiter, ich versuche wohl woanders mein glück. trotzdem danke.
 
Kannst du die Möglichkeiten, die vorkommen können, irgendwie weiter eingrenzen?
Oder sind das echt 10.000 cases?
 
Hi,

eins sei vorneweg gesagt:

Das CSV-Format eignet sich so gut zum Daten speichern, auswerten und auslesen wie eine Mülltone Sprungkraft hat.

Aber wenn es denn sein muss:

Ich würde die CSV datei per fopen() öffnen und in einer while -schleife auf die im Formular übergebenen Werte checken und bei einem match die Spalte B (wobei A die Prüfspalte für die Form-Daten sind) in einem Array speichern.

Code reiche ich bei Bedarf morgen nach...

Aber mal ehrlich: gibt's keine Datenbank? MySql?
Damit wird die Sache wirklich fixer!

YURI
 
Wenn ich es richtig verstanden habe, müsste das hier gehen, wenn php5 verfügbar ist(Als Alternative):

Eine Datei erstellen mit Namen test.xml Darin ist dann folgendes(Die Daten die Übergeben werden sollen):
Code:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<content>
 <eintrag id="1">
  <inhalt>100</inhalt>
 </eintrag>
 <eintrag id="2">
  <inhalt>200</inhalt>
 </eintrag>
</content>

Und dann kann man mit folgendem php-code auf die einzelnen Einträge zugreifen:
PHP:
<?php

$id = $_GET['id'];

if (file_exists("test.xml")) {

 $xml = simplexml_load_file("test.xml");

 $path ="/content/eintrag[@id=".$id."]";

 if (!$res = $xml->xpath($path)) {
  echo "Eintrag nicht vorhanden!";
 }
 else {
  echo $res[0]->inhalt;
 }
}
else {
exit("Konnte Datei nicht laden.");
}
?>
 
Zuletzt bearbeitet:
Zurück
Oben