Multidimensionale Array´s sortieren
Anne
- php
Hallo,
ich hatte vor einigen Wochen hier im Forum schon einmal Glück mit einer Frage, daher versuche ich es glatt noch einmal ;-)
Ich habe ein (Mehrdimensionales Array) das ich nach dem ersten Wert sotieren lassen möchte:
es soll also aus
Array
(
[0] => Array
(
[25000] => 28.90
)
[1] => Array
(
[15000] => 30.00
)
[2] => Array
(
[10000] => 36.00
)
)
folgendes werden:
Array
(
[0] => Array
(
[10000] => 36.00
)
[1] => Array
(
[15000] => 30.00
)
[2] => Array
(
[25000] => 28.90
)
)
Ich habe glaube ich auch eine Lösung gefunden. Aber offenbar bin ich nicht in der Lage sie an zu wenden.
Mein Array heißt $gewicht_preis_array also
function vergleich($wert_a, $wert_b)
{
// Sortierung nach dem zweiten Wert des Array (Index: 1)
$a = $wert_a[1];
$b = $wert_b[1];
if ($a == $b) {
return 0;
}
return ($a < $b) ? -1 : +1;
}
usort($gewicht_preis_array, 'vergleich');
Ich bekomme mitten im Scriptablauf folgende Fehlermeldung :
<b>Fatal error</b>: Cannot redeclare vergleich() (previously declared in...
Moin
Schau dir mal die Funktion array_multisort() an. Das könnte dir helfen
Gruß Bobby
Hi!
Schau dir mal die Funktion array_multisort() an. Das könnte dir helfen
Das könnte helfen, sie dauerhaft zu ignorieren, denn in den meisten Fällen hat man sein Array nicht so aufgebaut, wie es diese Funktion haben will.
Lo!
Hi!
Ich bekomme mitten im Scriptablauf folgende Fehlermeldung :
<b>Fatal error</b>: Cannot redeclare vergleich() (previously declared in...
Das liegt daran, dass du entweder die Funktionsdefinition in einer Schleife stehen hast oder in einer anderen Funktion, die mehrfach aufgerufen wird. Das geht nicht und ein wenig Suchen nach dem Wortlaut der Fehlermeldung hätte unter Garantie auch eine entsprechende Erläuterung ergeben. Stell den Funktionsaufruf "außerhalb" hin. Wo ist egal, nur nicht in eine Struktur, die mehrfach aufgerufen wird.
[code lang=php]function vergleich($wert_a, $wert_b)
{
// Sortierung nach dem zweiten Wert des Array (Index: 1)
$a = $wert_a[1];
$b = $wert_b[1];if ($a == $b) { return 0; } return ($a < $b) ? -1 : +1; }
Die Kurzform von obigem Code wäre:
return $wert_b[1] - $wert_a[1];
Es muss nicht exakt -1 oder +1 rauskommen, nur irgendwas im Negativen oder Positiven oder Null. Allerdings wirst du weder mit deiner noch mit meiner Version Glück haben, denn den Array-Index 1 kann ich in deinen Beispieldaten nicht erkennen.
Lo!
Hello Anne,
Ich habe ein (Mehrdimensionales Array)
das ich nach dem ersten Wert sotieren lassen möchte:
möchstest Du die Schlüssel-Wertezuordnungen dabei wirklich verändern, oder nur die Anordnung der Elemente im Array?
Es ist mir auch nicht einsichtig, wieso das Array nicht einfach nur so schlank aussieht.
Array
(
[25000] => 28.90
[15000] => 30.00
[10000] => 36.00
}
In dieser reduzierten Form wird es auch sofort deutlich, dass du nach Schlüsseln sorieren willst und nicht nach Werten.
Du könntest jetzt einen anderen Aufbau wählen für das Array, wenn Du sowohl die "Schlüssel" als auch die Werte als einander zugeordnete Elemente eines Datensatzes werten willst
Array
(
[number] => Array
(
[0] => 25000
[1] => 15000
[2] => 10000
)
[decimal] => Array
(
[0] => 28.90
[1] => 30.00
[2] => 36.00
)
}
Die Elemente ['number'] und ['decimal'] ergeben so je eine Spalte in einer Tabelle. Sie sind über ihren Index gebunden zu einem Datensatz. Die Indexe darf man nun freilich nicht mehr unkoordiniert verändern. Aber Das muss man ja auch nicht.
Der Vorteil ist nun aber, dass man die Standard-Arrayfunktionen auf jede einzelne Spalte anwenden kann. Je nachdem, nach welcher Spalte man das Array dann "abfährt" (iteriert mit foreach), hat man die Sortierung der Datensätze nach dieser Spalte. Man kann nun auch einfach die Summe Spalte bilden, das Minimum oder Maximum finden, usw.
Um die Sätze zu bearbeiten, benötigt man nur ein paar immer wieder verwendbare Standardfunktionen in seiner Library.
Die Funktionen findest Du hier:
http://forum.de.selfhtml.org/archiv/2009/5/t187244/#m1244374
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg