Mehrdimensionale Arrays anzeigen und bearbeiten

Hi,

Ich habe folgendes Problem: Ich besitze eine Buecherliste, welche in einer CSV-Datei steckt. PHP generiert daraus die Tabelle, um alles darzustellen. Ich moechte jetzt die Anzahl der Buecher ausgeben. Das klappt relativ einfach mit einem Zaehler. Weiterhin moechte ich allerdings die Anzahl der verschiedenen Autoren ausgeben, wobei einige Autoren doppelt vorkommen. Dasselbe gilt auch fuer die Genres und Verlage. Meine Ueberlegung war, den PHP-Befehl file() zu nutzen, um die Zeilen in einem Array wiederzufinden. Allerdings findet sich dort die komplette Zeile wieder. Ich suche nun eine Moeglichkeit, alle Zeilen nach ihrem Trennzeichen zu trennen, das waere also eine zweite Dimension… Irgendwie will ich den Befehl array_unique() anwenden, doch ich komme hier nicht weiter. Kann mir jemand helfen?

cu, cjmatsel
http://www.computerjockey.de/buecher/

Hi,

ich bin zwar auch PHP-Newbie, aber das was Du vorhast, sollte gehen. Du schreibst die Zeilen erstmal mit file() in ein Array. Dann baust Du einen 2-dimensionalen daraus mit einer Schleife, die das array per explode(„Trennzeichen“,array1) weiter zerlegt. Dann hast Du wenn die Autoren beispielsweise an 3. Stelle sind im Array[$x][3] die Liste der Autoren. Damit kannst Du dann in einer neuen Schleife per array_unique(array[$y][3]) die doppelten rausfiltern. Das Array hat dann aber noch die gleiche Länge, jedoch sind die Einträge der doppelten Autoren leer( bis auf den ersten natürlich). Das heisst Du musst eine neue Liste anlegen mit einer if(arry[$x][3] == „“) Abfrage, die dann die Einträge neu hochzählt.

Ich hoffe das war soweit verständlich (bin wie gesagt Anfänger…)

Gruss Hinne

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Danke,

ich denke, das wird so funktionieren, wie Du es schreibst. Ich werds mal versuchen.

-)

cu,
cjmatsel

Hi,

Ich habe es versucht und habe folgendes Problem:

Die Ausgabe auf dem Bildschirm ist ein grosses A, welches der erste Buchstabe von dem Wort Array ist. Die Schleife sieht wie folgt aus:

$array = file ($datei);
for($x=0;$x";
}
}

Kannst Du mir vielleicht sagen, wo ich bei Deiner Mail nicht richtig gelesen habe?

cu,
cjmatsel

Hi, Du musst Du 2dimensionalen array nen neuen Namen geben, also ungefähr so:

$array1 = file ($datei);
for($x=0;$x";
}
}

Wenn liste so aussieht:

allgemein: autor#titel#bestellnummer
speziell:

Müller#tollesbuch#0001
Maier#superbuch#002
schulze#geilesbuch#003
kuntze#schlechtesbuch#004

Das erste array „array1“ sieht dann so aus: („Müller#tollesbuch#0001“,„Maier#superbuch#002“ usw)

Dann brauchst Du ein neues zweites array „array2“ das dann so aussieht

array2[1]=(„müller“,„tollesbuch“,„001“)
array2[2]=(„Maier“,„superbuch“,„002“)

Mit deiner Ausgabe sollte es dann so aussehen:

Müller
tollesbuch
001
maier
superbuch
002 etc…

Hoffe das stimmt, kanns grad auch nicht ausprobieren…

Gruss Hinne

Hi,

das habe ich versucht, und es wird jeder Buchstabe untereinander geschrieben, und zwar die ersten 10 Buchstaben der ersten Spalte… Ich denke, es ist da ein Fehler drin, oder? Trotzdem vielen Dank fueur deine Hilfe, vielleicht weisst Du noch einen Rat.

cu,
cjmatsel

Hmmm, seltsam. Schick mir doch mal die Datei, in der die Buchdaten stehen, vielleicht blick ich dann eher durch. Ich habs bei mir mal so gemacht wie beschrieben, und das ging. Vielleicht liegts auch an der Datenquelle…

Gruss Hinne

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hi,

die Datei ist so aufgebaut, wie Du es sagtest:

text1#text2#text3
text10#text20#text30

Hier der Link:

http://www.computerjockey.de/buecher/buecher.rsv

Hi, ich habs jetzt mal lauffähig. Seltsam ist, dass das Problem wohl an der RSV-Datei liegt. Mit .txt gehts, mit .rsv bei mir nicht…

Hier der code:

//Liste auslesen
$liste_gesamt = file(„buchliste.txt“);
$connect_zahl = sizeof($liste_gesamt);
for($x=0;$x");
}
$autor_einzeln = array_unique($autor); //doppelte Autoren rausschmeissen
$verlag_einzeln = array_unique($verlag); //doppelte Verlage rausschmeissen
$a=0;
$b=0;

for ($y;$y
");
echo ("Es gibt „.sizeof($verlagliste).“ verschiedene Verlage, sie heissen: ");
for ($e;$e

Ist wahrscheinlich umständlicher als es sein müsste, aber es läuft:wink:

Gruss Hinne

Cool!

Vielen Dank! Ich will naemlich (auf Wunsch meiner Freundin…) die Autoren- und Verlagsliste dazu benutzen, eine Auswahlliste zu erstellen. Weisst Du vielleicht, wie ich mit diesen for-Schleifen andere Array’s erstellen und fuettern kann?

cu,
cjmatsel

Hi, das mit der Auswahlliste musst Du mir etwas genauer erklären. Welche Arrays willst Du erstellen und füttern?

Gruss Hinne

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hi,

hier habe ich die Lste schon erstellt, komme aber noch nicht weiter. Ich werde mich in dem Bezug noch mal mit selfhtml auseinandersetzen muessen… :wink:

Schau mal unter: http://www.computerjockey.de/buecher/2

cu,
cjmatsel

Hui, das wird langsam bissi komplizierter. Du willst dass eben nach der Auswahl auch was angezeigt wird, nehm ich an:wink:

Im Prinzip musst Du den Auswahlwert (als Beispiel rowling) durch das elemente-array jagen mit ner if-Anweisung. Also quasi eine neue Liste mit rowling als elemente[$x][1]-Treffer. Danach diese ausgeben. Bei mehreren Auswahlkriterien die if-Abfrage erweitern mit „and“. Also ungefähr so: if (elemente[$x][1] == „rowling“) and (elemente[$x][4] == „rororo“) {
$trefferliste[$a] = array1[$x];
$a++
}

So oder ähnlich, wobei „rowling“ und „rororo“ natürlich die Variablen aus der Auswahl sind und array1 das ursprüngliche array aus file(„buchliste.txt“)… Ausserdem weiss ich nicht ob die „and“-Anweisung so aussehen muss. SelfPHP ist da nicht ganz klar.

Kanns aber nicht ausprobieren grad, hab heut abend Klausur. Aber wenn Du willst schau ichs mir danach mal an.

Gruss Hinne

Hi,

Ja, so ungefaehr, allerdings dachte ich bis jetzt nur daran, dass man aus einem von diesen Auswahllisten waehlen kann und nicht aus allen dreien… naja, erstmal versuchen, so hinzubekommen… Vielen Dank fuer Deine Hilfe bis jetzt und viel Glueck bei Deiner Klausur!

cu,
cjmatsel

Hi cjmatsel,

Klausur war okay, danke für die Wünsche. Komme aber im Moment nicht dazu, mir Dein Problem anzuschauen, muss selbst was erstellen. Aber im Pinzip kanns nicht so schwer sein. Musst halt die Suchauswahl nehmen, in einer if-Anweisung das Listen-Arry abfragen und die möglichen Treffer ausgeben auf einer neuen Seite.

Gruss Marc