PHP Forum

PHP Forum (http://www.selfphp.de/forum/index.php)
-   PHP Grundlagen (http://www.selfphp.de/forum/forumdisplay.php?f=12)
-   -   Mehrdimensionales Array sortieren (http://www.selfphp.de/forum/showthread.php?t=11640)

MrLongbaugh 01.11.2005 15:23:48

Mehrdimensionales Array sortieren
 
Hallo,

das Sortieren von Arrays scheint immer wieder Thema zu sein. So auch bei mir.

Ich habe ein Array in der Form:

Code:

Array
(
    [0] => Array
        (
            [0] => Titel1
            [1] => 4
            [2] => 2
        )

    [1] => Array
        (
            [0] => Titel2
            [1] => 7
            [2] => 5
        )

    [2] => Array
        (
            [0] => Titel3
            [1] => 15
            [2] => 0
        )

    [3] => Array
        (
            [0] => Titel4
            [1] => 17
            [2] => 6
        )
)

Nun möchte ich das Array nach dem 2. Wert des zweiten Arrays sortieren.

Probiert habe ich das mit (Array steht in $data)

PHP-Code:

array_multisort ($data[2], SORT_ASCSORT_NUMERIC); 

Dies greift auf $data[2] zu und nicht auf $data[][2].

Wie kann ich nun aber danach sortieren?
Das Ergebnis sollte so aussehen:

Code:

Array
(
    [2] => Array
        (
            [0] => Titel3
            [1] => 15
            [2] => 0
        )

    [0] => Array
        (
            [0] => Titel1
            [1] => 4
            [2] => 2
        )

    [1] => Array
        (
            [0] => Titel2
            [1] => 7
            [2] => 5
        )

    [3] => Array
        (
            [0] => Titel4
            [1] => 17
            [2] => 6
        )
)


xabbuh 01.11.2005 18:59:35

AW: Mehrdimensionales Array sortieren
 
Dafür musst du zunächst ein Array erstellen, das aus den jeweiligen Werten besteht:
PHP-Code:

<?php
    $sortArray 
= array();
    foreach(
$data as $key => $array) {
        
$sortArray[$key] = $array[2];
    }

    
array_multisort($sortArraySORT_ASCSORT_NUMERIC$data);
?>


MrLongbaugh 02.11.2005 09:58:25

AW: Mehrdimensionales Array sortieren
 
Hallo xabbuh,

danke für die Antwort.

Ich glaube, ich habe mein Problem sagen wir mal suboptimal beschrieben.
Hier nun ein neuer Versuch:

Das gegebene Array soll neu sortiert werden. Dabei soll sich die Reihenfolge der Arrays der ersten Dimension ändern. Das Sortierkriterium soll der zweite Wert der zweiten Dimension ( etwa so $data[][2), SORT_ASC, SORT_NUMERIC) sein. Diesen kann ich jedoch per Multisort nicht ansprechen.

Die Reihenfolge der Array[1]- Array[5]wie die Zielvorgabe s.o.

Ich hoffe mich nun verständlicher ausgedrückt zu haben.

Danke für die Geduld

xabbuh 02.11.2005 12:13:10

AW: Mehrdimensionales Array sortieren
 
Genau das sollte mein Script auch tun. Hast du es mal getestet?

MrLongbaugh 02.11.2005 12:51:12

AW: Mehrdimensionales Array sortieren
 
mea culpa, mea maxima culpa.

Danke.
Genau so funktionierts.
Genau verstanden habe ich das ehrlich gesagt noch nicht, muss es mir noch mal in Ruhe ansehen.

Danke für Deine Mühe.

evil_knievel 08.10.2007 15:02:25

AW: Mehrdimensionales Array sortieren
 
Hallo,

dieser Thread ist zwar ziemlich alt, aber ich habe genau das gleiche Problem, nur diese Lösung funktioniert bei mir nicht.

Mein Array heisst arr_prodopt und sieht ähnlich aus (blaah sind irgendwelche Werte)

Array
(
[0] => Array
(
[0] => blaah
[1] => blaah
[2] => blaah
[3] => blaah
[4] => blaah
[5] => blaah
[6] => 127
[7] => blaah
)

[1] => Array
(
[0] => blaah
[1] => blaah
[2] => blaah
[3] => blaah
[4] => blaah
[5] => blaah
[6] => 629
[7] => blaah
)

[2] => Array
(
[0] => blaah
[1] => blaah
[2] => blaah
[3] => blaah
[4] => blaah
[5] => blaah
[6] => 42
[7] => blaah
)
usw ...
)

Nun will ich sortieren:

PHP-Code:

    $sort_prodopt = array();
    foreach(
$arr_prodopt as $key => $array) { 
        
$sort_prodopt[$key] = $array[6]; 
    } 

    
array_multisort($sort_prodoptSORT_ASCSORT_NUMERIC$arr_prodopt); 

aber das geht nicht.

Kann mir vielleicht jemand sagen was ich falsch mache?

rambi 08.10.2007 16:13:34

AW: Mehrdimensionales Array sortieren
 
Nöö..
Ich verwende für sowas meist usort()....

evil_knievel 09.10.2007 09:34:50

AW: Mehrdimensionales Array sortieren
 
OK OK,

habe Usort probiert aber wie es halt so ist funktioniert es nicht ganz:

PHP-Code:

function _compare($a$b) {
return (
$a == $b strcmp($a[5], $b[5]) : strcmp($a[6], $b[6]));
}

array ...

usort($arr_prodopt"_compare"); 

1. sortiert er für mich falsche (z.B. kommt 50 nach 490) : 1, 10, 2, 20 ... 490, 50
liegt das an strcmp, weil es für Strings ist? Habe für Integer bzw Zahlen da nichts gefunden.

2. wie sortiere ich erst nach Stelle 6 und dann nach Stelle 5 vom Array:

Beispiel:

array (blaah, blaah, blaah, blaah, blaah, 2, 100)
array (blaah, blaah, blaah, blaah, blaah, 1, 100)
array (blaah, blaah, blaah, blaah, blaah, 20, 50)
array (blaah, blaah, blaah, blaah, blaah, 10, 50)

mit dem Ergebnis:

array (blaah, blaah, blaah, blaah, blaah, 10, 50)
array (blaah, blaah, blaah, blaah, blaah, 20, 50)
array (blaah, blaah, blaah, blaah, blaah, 1, 100)
array (blaah, blaah, blaah, blaah, blaah, 2, 100)

evil_knievel 09.10.2007 09:40:06

AW: Mehrdimensionales Array sortieren
 
Hab einen besseren Code gefunden, damit ist Prob 1 gelöst, aber Prob 2 leider noch nicht:

PHP-Code:

function cmp ($a$b) {return $a[6] > $b[6]; } 


evil_knievel 09.10.2007 09:52:13

AW: Mehrdimensionales Array sortieren
 
Ich habs, für alle die es interessiert:

PHP-Code:

function _cmp ($a$b
{    
   if ( 
$a[5] == $b[5] )
   {     
        if (
$a[6] == $b[6]) 
            return 
0;
        else
           return ( 
$a[6] < $b[6] ) ? -: +1;
    }
    else
        return ( 
$a[5] < $b[5] ) ? -: +1;




Alle Zeitangaben in WEZ +2. Es ist jetzt 17:21:54 Uhr.

Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.