-
13. 05. 2007, 19:21 #1Mitglied
- Registriert seit
- May 2007
- Beiträge
- 12
PHP-Skript um Sortierfunktion erweitern!
Hallo liebe Forengemeinde,
zu allererst muss ich sagen, das meine PHP-Kenntnisse doch äußerst bescheiden sind, daher wende ich mich mit meiner Frage an euch mit der Hoffnung, das ihr mir weiterhelfen könnt.
Ich habe ein PHP-Skript mit folgender Funktion:
Mein Skript liest eine CSV-Datei aus und gibt die Daten in Form einer HTML-Tabelle aus.
PHP-Code:<?
$load=file('daten.csv');
$show="<table width=80% border=0 cellspacing=0 cellpadding=0>";
$show.="<tr>
<td><div align=center><b>Link1</b></div></td>
<td><div align=center><b>Beschreibung1</b></div></td>
<td><div align=center><b>Beschreibung2</b></div></td>
<td><div align=center><b>Beschreibung3</b></div></td>
<td><div align=center><b>Beschreibung4</b></div></td>
<td><div align=center><b>Beschreibung5</b></div></td>
<td><div align=center><b>Beschreibung6</b></div></td>
<td><div align=center><b>Beschreibung7</b></div></td>
<td><div align=center><b>Link2</b></div></td>
</tr>";
for($i=0;$i<=count($load)-1;$i++)
{
$data=explode(';',$load[$i]);
$show.="<tr>
<td><font size=2><div align=center>".$data[0]."</div></td>
<td><font size=2><div align=center>".$data[1]."</div></td>
<td><font size=2><div align=center>".$data[2]."</div></td>
<td><font size=2><div align=center>".$data[3]."</div></td>
<td><font size=2><div align=center>".$data[4]."</div></td>
<td><font size=2><div align=center>".$data[5]."</div></td>
<td><font size=2><div align=center>".$data[6]."</div></td>
<td><font size=2><div align=center>".$data[7]."</div></td>
<td><font size=2><div align=center>".$data[8]."</div></td>
<td><font size=2><div align=center>".$data[9]."</div></td>
</tr>";
}
echo $show;
echo "</table>";
?>
Jetzt möchte ich dieses PHP-Skript um eine für mich sehr wichtige Funktion erweitern:
Ich möchte alle Spalten mit einer Auf- und Absteigenden Sortierfunktion versehen. Sobald man auf die Überschrift der Spalte klickt (z.B. auf Link1 oder auf Beschreibung1) soll die gesamte Spalte sortiert werden.
Ist dieses Skript um diese Funktion erweiterbar? Wenn ja, wie mache ich das?
Ich danke euch schon einmal im Voraus!
-
13. 05. 2007, 20:00 #2
Re: PHP-Skript um Sortierfunktion erweitern!
arsort(), asort(), ksort(), krsort(), natsort(), natcasesort(), rsort(), usort(), array_multisort() und uksort().
such dir was aus.
einfach aus array anwenden.
-
13. 05. 2007, 20:03 #3
Re: PHP-Skript um Sortierfunktion erweitern!
ich denke mal es wäre besser wenn du zuerst die datei in ein array einliest und erst danach mit diesem array weiterarbeitest.
im moment ist es ja so, dass du es einließt und direkt wieder ausgibst.
dann nutzt die php funktion array_multisort()
und das müsste dann funktionieren.
-
13. 05. 2007, 20:06 #4
Re: PHP-Skript um Sortierfunktion erweitern!
Zitat von St@tic
Ist doch ein Array, oder?PHP-Code:$load=file('daten.csv');
-
13. 05. 2007, 20:14 #5
Re: PHP-Skript um Sortierfunktion erweitern!
Ja, ist es.
-
13. 05. 2007, 20:30 #6
Re: PHP-Skript um Sortierfunktion erweitern!
War rhetorisch gefragt.
-
13. 05. 2007, 21:45 #7Mitglied
- Registriert seit
- Jan 2003
- Beiträge
- 453
Re: PHP-Skript um Sortierfunktion erweitern!
Ja, aber kein Multidimensionales. Und das braucht man um nach Spalten zu sortieren.
Zitat von heXagon
Deswegen array selber bauen. Mit fgetcsv und dann wie schon erwähnt array_multisort.
-
13. 05. 2007, 22:52 #8Mitglied
(Threadstarter)
- Registriert seit
- May 2007
- Beiträge
- 12
Re: PHP-Skript um Sortierfunktion erweitern!
Wie gesagt, meine PHP Kenntnisse sind äußerst bescheiden.
Wie sehe das denn konkret aus?
-
13. 05. 2007, 23:21 #9Mitglied
- Registriert seit
- Jan 2003
- Beiträge
- 453
Re: PHP-Skript um Sortierfunktion erweitern!
Mal so ganz konkret:
Schön machen darst du es selbst. Dabei am besten gleich auf die FONT-Tags verichten (oder wenigstens schließenPHP-Code:<?php
// http://de3.php.net/manual/de/function.array-multisort.php#61334
function sortmddata($array, $by, $order = 'ASC', $type = 'STRING') {
// $array - Zu sortierendes Multidimensionales Array
// $by - Spalte nach der Sortiert werden soll
// $order - ASC (aufsteigend) oder DESC (absteigend)
// $type - NUM (numerisch) oder STRING
$sortby = "sort$by";
$firstval = current($array);
$vals = array_keys($firstval);
foreach ($vals as $init) {
$keyname = "sort$init";
$$keyname = array();
}
foreach ($array as $key => $row) {
foreach ($vals as $names) {
$keyname = "sort$names";
$test = array();
$test[$key] = $row[$names];
$$keyname = array_merge($$keyname, $test);
}
}
if ($order == "DESC") {
if ($type == "num") {
array_multisort($$sortby, SORT_DESC, SORT_NUMERIC, $array);
} else {
array_multisort($$sortby, SORT_DESC, SORT_STRING, $array);
}
} else {
if ($type == "num") {
array_multisort($$sortby, SORT_ASC, SORT_NUMERIC, $array);
} else {
array_multisort($$sortby, SORT_ASC, SORT_STRING, $array);
}
}
return $array;
}
$csv = array();
// Alles einlesen
$handle = fopen ("daten.csv","r");
while (($data = fgetcsv ($handle, 1000, ";")) !== false ) {
$csv[] = $data;
}
fclose ($handle);
// .. und sortieren
$sort_column = (isset($_GET['sortcolumn']) ? $_GET['sortcolumn'] : 0);
$sort_order = (isset($_GET['sortorder']) ? $_GET['sortorder'] : 'ASC');
$csv = sortmddata($csv, $sort_column, $sort_order);
?>
<table width=80% border=0 cellspacing=0 cellpadding=0>
<tr>
<td>
<a href="?sortcolumn=0&sortorder=DESC">absteigend</a>
Link1
<a href="?sortcolumn=0&sortorder=ASC">aufsteigend</a>
</td>
<td>
<a href="?sortcolumn=1&sortorder=DESC">absteigend</a>
Beschreibung1
<a href="?sortcolumn=1&sortorder=ASC">aufsteigend</a>
</td>
<td><div align=center><b>Beschreibung2</b></div></td>
<td><div align=center><b>Beschreibung3</b></div></td>
<td><div align=center><b>Beschreibung4</b></div></td>
<td><div align=center><b>Beschreibung5</b></div></td>
<td><div align=center><b>Beschreibung6</b></div></td>
<td><div align=center><b>Beschreibung7</b></div></td>
<td><div align=center><b>Link2</b></div></td>
</tr>
<?php foreach ($csv as $row) : ?>
<tr>
<td><font size=2><div align=center><?php echo $row[0]; ?></div></td>
<td><font size=2><div align=center><?php echo $row[1]; ?></div></td>
<td><font size=2><div align=center><?php echo $row[2]; ?></div></td>
<td><font size=2><div align=center><?php echo $row[3]; ?></div></td>
<td><font size=2><div align=center><?php echo $row[4]; ?></div></td>
<td><font size=2><div align=center><?php echo $row[5]; ?></div></td>
<td><font size=2><div align=center><?php echo $row[6]; ?></div></td>
<td><font size=2><div align=center><?php echo $row[7]; ?></div></td>
<td><font size=2><div align=center><?php echo $row[8]; ?></div></td>
<td><font size=2><div align=center><?php echo $row[9]; ?></div></td>
</tr>
<?php endforeach; ?>
</table>
). Auch die DIVs in den TDs sind überflüssig. Für den Tabellenkopf die TDs in THs antsatt in TRs einschließen, und dann alles schön per CSS stylen. Viel Spass 
-
13. 05. 2007, 23:53 #10Mitglied
(Threadstarter)
- Registriert seit
- May 2007
- Beiträge
- 12
Re: PHP-Skript um Sortierfunktion erweitern!
@sTu´-: Boah, auf soviel Hilfsbereitschaft hätte ich jetzt nicht gesetzt. Bin echt extrem positiv überrascht. Vielen, vielen Dank für deine Hilfe!
Das Skript hab ich eben mal kurz ausprobiert. Klappt prima! Hast mir wirklich sehr weitergeholfen!
Aber eine Frage habe ich noch:
Aufgrund der Übersichtlichkeit, würde ich gerne jeder zweiten Zeile eine andere Hintergrundfarbe geben. Also so:
Zeile1 (Schwarz)
Zeile2(Weiß)
Zeile3(Schwarz)
Zeile4(Weiß)
Zeile5(Schwarz)
usw.
Im Prinzip 2 Hintergrundfarben (Schwarz + Weiß). Immer abwechselnd und jeweils immer für eine ganze Zeile. Die Überschriftenzeile sollte davon nicht betroffen sein, sonderrn nur die Zeilen die durch den Datensatz der csv-Datei erzeugt werden. Kann man dies in das Skript integrieren?
-
14. 05. 2007, 00:14 #11Mitglied
- Registriert seit
- Jan 2003
- Beiträge
- 453
Re: PHP-Skript um Sortierfunktion erweitern!
aus dem
das hier machen:PHP-Code:</tr>
<?php foreach ($csv as $row) : ?>
<tr>
Gute Nacht!PHP-Code:</tr>
<?php
$oddeven = '';
foreach ($csv as $row) :
$oddeven = ($oddeven == 'odd') ? 'even' : 'odd';
?>
<tr style="background-color: <?php echo ($oddeven == 'odd') ? '#ccc' : '#f00'; ?>">
-
04. 03. 2009, 20:05 #12Mitglied
- Registriert seit
- Mar 2009
- Beiträge
- 2
Re: PHP-Skript um Sortierfunktion erweitern!
Hallo liebe Forumsmitglieder,
ich habe dieses Thema aufgemacht, weil ich eure Hilfe brauche.
Ich habe keine Ahnung von PHP haber schon gegoogelt und selbst nach eine Lösung gesucht aber nichts gefunden oder nur Bahnhof verstanden.
Es geht um die Sortierung von Zahlen.
Ich ahbe es mit SORT_STRING, SORT_NUMERIC und SORT_REGULAR probiert, funzt aber nicht.
Das Problem:
Ausgabe von Zahlen mit Komma oder Punkt erscheint folgendes:
114,50 12,75 14,80 usw.
Ausgabe müsste aber lauten:
12,75 14,80 114,50 usw.
Ich hoffe ihr könnt mir helfen und bedanke mich schon einmal.
Viele Grüße
Nick48
-
05. 03. 2009, 06:50 #13Mitglied
- Registriert seit
- Mar 2009
- Beiträge
- 2
Re: PHP-Skript um Sortierfunktion erweitern!
Hallo,
es hat sich erledigt. Ich Dummkopf hatte vergessen den $type zu ändern. Dann kann es natürlich nicht gehen.
Ich staune nur, dass es keine Fehlermeldung gegeben hat.
Viele Grüße
Nick48
-


Zitieren
mehr lesen...







Occupy Kiel: Massiver Sachschaden...
Heute, 20:15 in gulli:news