| 

.NET C# Java Javascript Exception

5
Ich habe ein PHP Array: $arr_cart
Das Array beinhaltet Daten zu Artikeln, von verschiedenen Verkäufern.

Der Aufbau sieht so aus:
Array
(
[0] => Array
(
[id] => 384f5de3ea2fded
[qty] => 1
[price] => 10.00
[name] => testartikel 1
[sellerid] => 1
[sellername] => seller1
[subtotal] => 10
)

[1] => Array
(
[id] => 3624e0d2963459d2
[qty] => 2
[price] => 250.00
[name] => testartikel 2
[sellerid] => 2
[sellername] => seller2
[subtotal] => 500
)

// usw..

)


Nun benötige ich aber die Daten sortiert, nach der "sellerid".
Damit ich per Schleife für die Daten für jeden Verkäufer aus dem Array nacheinander verarbeiten kann.

Jetzt bin ich am überlegen, wie man dies am besten umsetzt.
Hat evtl. jemand eine Idee für mich?
Vielen Dank!
News:
20.03.2012
chrispo 275 7
LiRo 1,3k 1 9
3 Antworten
1
Moin

Code:
function array_sort($array, $on, $order=SORT_ASC)
{
$new_array = array();
$sortable_array = array();

if (count($array) > 0) {
foreach ($array as $k => $v) {
if (is_array($v)) {
foreach ($v as $k2 => $v2) {
if ($k2 == $on) {
$sortable_array[$k] = $v2;
}
}
} else {
$sortable_array[$k] = $v;
}
}

switch ($order) {
case SORT_ASC:
asort($sortable_array);
break;
case SORT_DESC:
arsort($sortable_array);
break;
}

foreach ($sortable_array as $k => $v) {
$new_array[$k] = $array[$k];
}
}

return $new_array;
}

$values[] = array ("id" => "384f5de3ea2fded", sellerid => 1, sellername => "Zeppelin");
$values[] = array ("id" => "384f5de3ea2fdef", sellerid => 4, sellername => "Buxbaum");
$values[] = array ("id" => "384f5de3ea2fde1", sellerid => 3, sellername => "Rosenkranz");
$values[] = array ("id" => "384f5de3ea2fde2", sellerid => 7, sellername => "Lotus");

echo "<pre>";
print_r($values);
print_r(array_sort($values, "sellerid"));
print_r(array_sort($values, "sellername"));


Ausgabe:
// Unsorted:
Array
(
[0] => Array
(
[id] => 384f5de3ea2fded
[sellerid] => 1
[sellername] => Zeppelin
)

[1] => Array
(
[id] => 384f5de3ea2fdef
[sellerid] => 4
[sellername] => Buxbaum
)

[2] => Array
(
[id] => 384f5de3ea2fde1
[sellerid] => 3
[sellername] => Rosenkranz
)

[3] => Array
(
[id] => 384f5de3ea2fde2
[sellerid] => 7
[sellername] => Lotus
)

)
// Sorted by sellerid :
Array
(
[0] => Array
(
[id] => 384f5de3ea2fded
[sellerid] => 1
[sellername] => Zeppelin
)

[2] => Array
(
[id] => 384f5de3ea2fde1
[sellerid] => 3
[sellername] => Rosenkranz
)

[1] => Array
(
[id] => 384f5de3ea2fdef
[sellerid] => 4
[sellername] => Buxbaum
)

[3] => Array
(
[id] => 384f5de3ea2fde2
[sellerid] => 7
[sellername] => Lotus
)

)

// Sorted by sellername
Array
(
[1] => Array
(
[id] => 384f5de3ea2fdef
[sellerid] => 4
[sellername] => Buxbaum
)

[3] => Array
(
[id] => 384f5de3ea2fde2
[sellerid] => 7
[sellername] => Lotus
)

[2] => Array
(
[id] => 384f5de3ea2fde1
[sellerid] => 3
[sellername] => Rosenkranz
)

[0] => Array
(
[id] => 384f5de3ea2fded
[sellerid] => 1
[sellername] => Zeppelin
)

)


Hoffe das hilft?

Grüße
21.03.2012
Nicolai Schönberg 2,4k 2 9
Danke für deine Lösung! Viel Code, aber es funktioniert alles :)
chrispo 21.03.2012
Hallo, ja es ist eine etwas längere Funktion. Aber dafür ist es egal wie viele Dimensionen das Array hat und du kannst nach jedem Key sortieren - Und das auch noch aufsteigend oder absteigend. Dafür ist der code gar nicht so lang ;-) Viel Spaß damit und ich würde mich über eine akzeptierte Antwort freuen
Nicolai Schönberg 21.03.2012
1
Oder ein *bischen* einfacher :)
$helper = array();
foreach( $input as $i=>$v )
$helper[$v['sellerid'] = $i;
ksort($helper);
$output = array();
foreach( $helper as $id=>$i )
$output[] = $input[$i];
21.03.2012
DaSpors 4,2k 2 8
Danke für deine Hilfe!
Aber kann es sein, dass es zu Problemen kommt, wenn die sellerid mehrfach vorkommt, mit anderen Artikeldaten?
dann kommt diese nämlich im output array nur noch einmal vor.
chrispo 21.03.2012
Stimmt, da hast Du recht.
DaSpors 21.03.2012
1
Hi, auch wenn eine Antwort schon fest steht ...

Ich würde bei Deinem Array mit uksort arbeiten: http://de2.php.net/manual/de/function.uksort.php

Dabei gibst Du eine Vergleichsfunktion an. In Deinem Fall prüft diese dann die 'sellerid' und liefer -1, 0 oder 1 zurück.

bool uksort ( array &$array , callback $cmp_function )

uksort() sortiert die Schlüssel eines Arrays mittels einer benutzerdefinierten Vergleichsfunktion. Soll das Array nach nicht trivialen Kriterien sortiert werden, sollten Sie diese Funktion verwenden.
21.03.2012
Xantiva 2,3k 2 9

Stelle deine Php-Frage jetzt!