array_multisort
Tobias S
- php
Hallo!
Vorne weg: ich hab noch kaum was mit PHP gemacht, also sind Anfängerfehler durchaus möglich!
Ich lese ein 2 dimensionales Array von einem kleinen Formular ein. Dann soll innerhalb der Zeilen sortiert werden, die Zeilenreihenfolge aber gleich bleiben. Dann das ganze ausgeben.
Mein Code:
--------------------------------------------
<table>
<?php
// 1) in Array schreiben (2-dimensional: AnzTips*6)
$tips = array(
"Tipp 1" => array($_REQUEST["b1"],$_REQUEST["b2"],$_REQUEST["b3"],$_REQUEST["w1"],$_REQUEST["w2"],$_REQUEST["w3"]),
"Tipp 2" => array($_REQUEST["b1"],$_REQUEST["b2"],$_REQUEST["b3"],$_REQUEST["w1"],$_REQUEST["w4"],$_REQUEST["w5"]),
"Tipp 3" => array($_REQUEST["b1"],$_REQUEST["b2"],$_REQUEST["b3"],$_REQUEST["w1"],$_REQUEST["w6"],$_REQUEST["w7"]),
"Tipp 4" => array($_REQUEST["b1"],$_REQUEST["b2"],$_REQUEST["b3"],$_REQUEST["w2"],$_REQUEST["w4"],$_REQUEST["w6"]),
"Tipp 5" => array($_REQUEST["b1"],$_REQUEST["b2"],$_REQUEST["b3"],$_REQUEST["w2"],$_REQUEST["w5"],$_REQUEST["w7"]),
"Tipp 6" => array($_REQUEST["b1"],$_REQUEST["b2"],$_REQUEST["b3"],$_REQUEST["w3"],$_REQUEST["w4"],$_REQUEST["w7"]),
"Tipp 7" => array($_REQUEST["b1"],$_REQUEST["b2"],$_REQUEST["b3"],$_REQUEST["w3"],$_REQUEST["w5"],$_REQUEST["w6"])
);
// 2) Array sortieren (innerhalb der Tips)
array_multisort($tips['Tipp 1'],$tips['Tipp 2'],$tips['Tipp 3'],$tips['Tipp 4'],$tips['Tipp 5'],$tips['Tipp 6'],$tips['Tipp 7']);
// 3) Ausgabe
foreach ($tips as $key => $zahl)
{
print " <tr style=\"border:1px solid #888\">\n";
print " <td width=\"60\">$key:</td>\n";
foreach ($tips[$key] as $index)
{
print " <td width=\"20\" style=\"width:20px;text-align:center;spacing:4px;border:1px solid #888\">$index</td>\n";
}
print " </tr>\n";
}
?>
</table>
--------------------------------------------
Ich finde leider den Fehler nicht, aber die sortierung passt nicht. Nochmal: es soll nach den Formular-Werten sortiert werden... ich vermute hier den Fehler, weil wenn ich statt den $_REQUEST gleich Zahlen einsetze, funktioniert es!
Danke für eure Hilfe, mfg, Tobias
hi,
Ich lese ein 2 dimensionales Array von einem kleinen Formular ein. Dann soll innerhalb der Zeilen sortiert werden, die Zeilenreihenfolge aber gleich bleiben. Dann das ganze ausgeben.
array_multisort sortiert Spaltenarrays.
Für Zeilenarrays eignet sich usort mit einer selbstdefinierten Vergleichsfunktion besser.
http://forum.de.selfhtml.org/archiv/2006/11/t140321/#m911851
gruß,
wahsaga
Hmm...
Also ich habe mir deinen Archiv-Link angesehen und die usort Funktion auch hier nocheinmal: http://manuals.phpforum.de/php/function.usort.php
Das dortige Beispiel für multidimensionale Arrays funktioniert aber bei mir nicht!? Gibt's dafür eine Erklärung, außer, dass es dort falsch angewendet ist? Habe es 1:1 bei mir reinkopiert und es liefert als output "$fruits[0]: Trauben $fruits[1]: Zitronen $fruits[2]: Äpfel " und nicht die gewünschte sortierte Liste.
Das usort verstehe ich leider selbst auch nicht wirklich :-( Kannst du mir das kurz erklären bezogen auf mein Beispiel?
Und dann noch: Geht es mit array_multisort wirklich nicht? Dazu hatte ich nämlich auch Beispielcode den ich an meines angepasst habe. In dem Beispiel klappt das genau wie ich es haben wollte...:
-------------
<?
$stadt=array(
"Berlin"=>array("Maier","Schmidt","Schulze","Erdmann"),
"Bonn"=>array("Lehmann","Martinez","Zumkeller","Fritsche"),
"Freiburg"=>array("Binsenteich","Knobloch","Erzengel","Dichter")
);
array_multisort($stadt['Berlin'],$stadt['Bonn'],$stadt['Freiburg']);
foreach ($stadt as $key=>$name)
{
print "<br><font color=red>In $key wohnen</font> <br>--------<br>";
foreach ($stadt[$key] as $index)
{
print "$index <br>";
}
}
?>
-------------
Danke, mfg, Tobias
hi,
Also ich habe mir deinen Archiv-Link angesehen und die usort Funktion auch hier nocheinmal: http://manuals.phpforum.de/php/function.usort.php
Das dortige Beispiel für multidimensionale Arrays funktioniert aber bei mir nicht!? Gibt's dafür eine Erklärung, außer, dass es dort falsch angewendet ist?
Hast du die Vergleichsfunktion denn auch so angepasst, dass sie zwei Elemente deines Arrays vergleicht?
gruß,
wahsaga
Naja, um die Funktion mal kennenzulernen hab ich die dortige Funktion genau übernommen. Also das mit den Früchten ;-)
Aber sie gibt eben bei mir nichtmal das aus was sie soll. Ich hab das Problem aber mittlerweile schon durch 1dim => sort => in 2 dim schreiben gelöst.
Danke trotzdem, mfg Tobias
Hi
»»wenn ich statt den $_REQUEST gleich Zahlen einsetze, funktioniert es!
Angesichts dieser Aussage würde ich mal die Werte in Zahlen umwandeln.
Also überall so:
[code=php]<?
//(...)
array((int)$_REQUEST["b1"],(int)$_REQUEST["b2"],(int)$_REQUEST["b3"] //(...)[/code]
(ich habe den Code allerdings nicht durchgelesen).
Außerdem ist es möglich Textfelder direkt als Array einzulesen, in HTML steht dann:
[code=html]<input type="text" name="Tipps[Tipp_1][0]">
<input type="text" name="Tipps[Tipp_1][1]">
<input type="text" name="Tipps[Tipp_1][2]">
<!-- (...) -->
<input type="text" name="Tipps[Tipp_2][0]">
<input type="text" name="Tipps[Tipp_2][1]">
<input type="text" name="Tipps[Tipp_2][2]">
<!-- (...) -->
<input type="text" name="Tipps[Tipp_7][4]">
<input type="text" name="Tipps[Tipp_7][5]">
<input type="text" name="Tipps[Tipp_7][6]">
Hallo!
Ich habe das mit dem (int) casten probiert, es ändert aber am Output leider gar nichts.
Das mit dem direkt ins Array einlesen ist interessant. Werde es mir genauer ansehen, aber für das Sortier-Problem sollte es keinen Unterschied machen oder?
mfg Tobias
»»aber für das Sortier-Problem sollte es keinen Unterschied machen oder?
Nein nur das Einlesen wird vereinfacht (ich glaube nichtmal beschleunugt)
Hallo!
Ich habe es jetzt so gelöst, dass ich zuerst in einzelne (1dim) arrays einlese, diese sortiere und dann ins zwei-dim. schreibe.
Das ist zwar mehr Schreibarbeit und nicht so schön aber wenigstens bekomm ich die richtige Sortierung hin. Falls mir das doch noch jemand mit dem 2dim näher bringen könnte wäre ich aber dankbar!
danke, mfg, Tobias