Mehrdimensionales Array sortieren, versteh es nicht...
Benjamin Keil
- php
Hallo,
ich habe vergeblich überall gesucht.
Im Forumsarchiv scheint es auch viel zu geben,
aber die Links sind tot ;-(
Ich habe folgendes, mehrdimensionales Array:
$liste = array(
1 => array ("200", "blabla", "irgendwas", "hallo"),
2 => array ("135", "blabla", "irgendwas", "hallo"),
3 => array ("956", "blabla", "irgendwas", "hallo"),
4 => array ("632", "blabla", "irgendwas", "hallo"),
);
Das ganze wird mit foreach($liste as $eintrag) ausgegeben.
Welche Sortierfunktion brauche ich um das vorher nach
dem ersten Wert (2oo, 135, 956 und 632) zu sortieren?
Falls es asort sein sollte, wie packe ich das an?
Verzeiht meine Blindheit,
Gruß
Ben
Ich würde es mal mit usort (http://de.php.net/manual/de/function.usort.php) und einer eigenen Vergleichsfunktion probieren..
Hallo Ben,
ich weiß nicht, ob es dir was hilft, aber nimm doch doch einfach den Wert, nach dem Du sortieren willst als Schlüssel sortiere mit ksort danach?
<?php
$liste = array();
$liste = array(
200 => array ("200", "blabla", "irgendwas", "hallo"),
135 => array ("135", "blabla", "irgendwas", "hallo"),
956 => array ("956", "blabla", "irgendwas", "hallo"),
632 => array ("632", "blabla", "irgendwas", "hallo"),
);
ksort($liste);
print_r($liste);
?>
bei mir hats eben geklappt...
gruß, Barbara
Hallo Barbara
ich weiß nicht, ob es dir was hilft, aber nimm doch doch einfach den Wert, nach dem Du sortieren willst als Schlüssel sortiere mit ksort danach?
Wo und wie muss ich den Schlüssel denn angeben?
ksort($liste);
print_r($liste);?>
bei mir hats eben geklappt...
Merkwürdig, bei diesem Beispiel klappts,
aber bei anderen Werten leider nicht.
ksort scheint richtig zu sein, aber das Beispiel
http://www.php.net/manual/de/function.ksort.php bekomme
ich darauf einfach nicht übertragen.
Gruß,
Ben
hallo Ben,
verstehe nicht ganz das Problem, bei gehts auch mit anderen Werten, siehe unten.
Ich weiß nicht, ob Du das für dich jetz kalter Kaffee ist, besser erklärt sicherlich unter http://www.php.net/manual/de/language.types.array.php
Gruß! Barbara
<?
$listee = array(
200 => array ("200", "blabla", "irgendwas", "hallo")
);
$listee["neuer Schlüssel als string"] = array("200", 5);
$listee[123] = array ("200", "blabla");
print_r($listee);
ksort($listee);
print_r($listee);
/*
Array
(
[neuer Schlüssel als string] => Array
(
[0] => 200
[1] => 5
)
[123] => Array
(
[0] => 200
[1] => blabla
)
[200] => Array
(
[0] => 200
[1] => blabla
[2] => irgendwas
[3] => hallo
)
)
*/
$fruits = array ("d"=>"Zitrone", "a"=>"Orange", "b"=>"Banane", "c"=>"Apfel");
?>
hallo Ben,
sorry, vielleicht habe ich gerade das Entscheidende vergessen, Du kannst latürnich auch eine variable benutzen, um den Schlüssel zu bilden...
$listee["$DeineVariablealsSchlüssel"] = array("200", 5);
bis morgen, gehe jetzt schlafen, B.
sorry, vielleicht habe ich gerade das Entscheidende vergessen, Du kannst latürnich auch eine variable benutzen, um den Schlüssel zu bilden...
Werte mit selbstdefiniertem Schlüssel später hinzufügen:
$listee["$DeineVariablealsSchlüssel"] = array("200", 5);
bis morgen, gehe jetzt schlafen, B.
Jetzt geht mir ein großes Licht auf! Das mit dem Schlüssel
hab ich zuerst nicht verstanden, jetzt ist alles klar,
wenn der Schlüssel zu dem zu sortierenden Wert wird,
dann kann man mit ksort das Array sortieren.
Bevor man versucht php zu verstehen muss man zuerst lernen
um die Ecke zu denken ;-)
Der Link war kein 'kalter Kaffee', hab's zwar schon des
gelesen, auch im Buch, aber irgendwie übersieht
man das eine oder andere immer wieder...
Schlaf schön,
Ben
P.S. Noch eine kleine Frage, falls das hier noch jemand liest,
möchte keinen neuen Thread dafür aufmachen:
Irgendwo hab ich mal eine vereinfachung von...
echo "Variale: $variable <br>/n";
...gesehen, find's nicht wieder, weiß' das gerade jemand?
Bevor man versucht php zu verstehen muss man zuerst lernen
um die Ecke zu denken ;-)
naja.
Übrigens so geht es mit der Vergleichsfunktion:
function cmp($a, $b)
{
return ($a[0] - $b[0]);
}
$liste = array(
1 => array ("200", "blabla", "irgendwas", "hallo"),
2 => array ("135", "blabla", "irgendwas", "hallo"),
3 => array ("956", "blabla", "irgendwas", "hallo"),
4 => array ("632", "blabla", "irgendwas", "hallo"),
);
usort($liste, "cmp");
P.S. Noch eine kleine Frage, falls das hier noch jemand liest,
möchte keinen neuen Thread dafür aufmachen:Irgendwo hab ich mal eine vereinfachung von...
echo "Variale: $variable <br>/n";
...gesehen, find's nicht wieder, weiß' das gerade jemand?
hm... meintest du <?= $variable ?>
Hallo Werner,
Jetzt verstehe ich auch was Du mit der Vergleichsfunktion
meinst. Danke, das ist auch eine nette Lösung!!
Hab' heute wieder einiges dazugelernt.
hm... meintest du <?= $variable ?>
Ne, ich meine innerhalb eines PHP-Blocks.
Wie testest Du den Inhalt einer Variable?
Ich meine mal eine verkürzte Schreibweise
von echo "Variale: $variable <br>/n"; gesehen zu haben,
in der 'variable' nur einmal vorkam, bin mir
nach Deinem Beispiel aber nicht mehr ganz sicher...
Gruß,
Ben
man kann es so machen:
$newlist = array();
$liste = array(
1 => array ("200", "blabla", "irgendwas", "hallo"),
2 => array ("135", "blabla", "irgendwas", "hallo"),
3 => array ("956", "blabla", "irgendwas", "hallo"),
4 => array ("632", "blabla", "irgendwas", "hallo"),
);
var_dump ($liste);
foreach($liste as $index => $value)
{
$id=$value[0];
echo $id;
$newlist[$id]=$value;
}
krsort($newlist);
aber ich weis das es dafür auch ein befehl gibts, muss ich nochmal scahuen.
$newlist = array();
$liste = array(
1 => array ("200", "blabla", "irgendwas", "hallo"),
2 => array ("135", "blabla", "irgendwas", "hallo"),
3 => array ("956", "blabla", "irgendwas", "hallo"),
4 => array ("632", "blabla", "irgendwas", "hallo"),
);
var_dump ($liste);
Was ist var_dumb? Unnötig oder?
krsort($newlist);
krsort macht alles falschrum, aber mit rsort geht´s.
Leider stimmen die ID's (1,2,3,4) nacher nicht mehr,
aber in diesem Fall brauche ich sie nicht.
aber ich weis das es dafür auch ein befehl gibts, muss ich nochmal scahuen.
Das wäre prima!!
Vielen Dank aber schonmal, so müsste ich es hinbekommen.
Gruß,
Ben
krsort macht alles falschrum, aber mit rsort geht´s.
Ich meine ksort.