multiArray sortieren

Riegel

Mitglied
Hallo ich kann mir vorstellen euch kotzt es an, aber ich bin php-Neuling und komm mit dem usort, sort, blablabla einfach nicht klar.


Ich habe ein Array in folgender Form:
PHP:
pers[0][0] = Test
pers[0][1] = Albert
pers[0][2] = 1

pers[1][0] = Hanz
pers[1][1] =Joachim
pers[1][2] = 3

möchte es nun noch den Zahlen (in meinem Fall 14. Feld) sortieren. Wie bekomme ich das hin?

Leider ist noch kein Meister vom Himmel gefallen, also dumme Kommentare wie Suchfunktion usw könnt ihr euch gerne sparen :-), hab ich den ganzen Tag schon gemacht, find aber kein Bsp anhand dessen ich es verstehen würde.

Entweder will mir einer helfen oder lasst es bitte, danke :-))
 
das ergibt bei mir das totale Chaos:-))


ich erleutere es mal weiter, so sieht mein Script in ca aus (Ja ich brauche soviele Variablen...grins)

PHP:
//Array wird nach und nach gefüllt
array_push($pers,"$name", "$anzhspiele", "$hvolleschnitt", "$habraeumenschnitt", "$hfehlwurfschnitt", "$hgesamtschnitt",  "$anzaspiele", "$avolleschnitt", "$aabraeumenschnitt", "$afehlwurfschnitt", "$agesamtschnitt", "$anzspiele", "$volleschnitt", "$abraeumenschnitt", "$fehlwurfschnitt", "$gesamtschnitt");

//Array wir sortiert
function cmp ($a, $b) {
    if ($a[15] == $b[15]) return 0;
    return ($a[15] < $b[15]) ? -1 : 1;
    }

usort ($pers, "cmp");


Nun bekomme ich ein Ergebniss das gar nicht mehr stimmt.......

Nochmal:

Es soll das oben angegebene Array sortieren, aber die Werte

pers[0][0] = Test
pers[0][1] = Albert
pers[0][2] = 1

nicht auseinander reisen.....die gehören ja zusammen :-) Ist es dann trotzdem richtig und ich stell mich nur dumm an?
danke
 
Das ist schonmal fehlerhaft:
PHP:
array_push($pers,"$name", "$anzhspiele", "$hvolleschnitt", "$habraeumenschnitt", "$hfehlwurfschnitt", "$hgesamtschnitt",  "$anzaspiele", "$avolleschnitt", "$aabraeumenschnitt", "$afehlwurfschnitt", "$agesamtschnitt", "$anzspiele", "$volleschnitt", "$abraeumenschnitt", "$fehlwurfschnitt", "$gesamtschnitt");
Das muss so aussehen:
PHP:
array_push($pers,$name, $anzhspiele, ... );
Wenn Du das gemacht hast. Was gibt dann folgender Code aus, nachdem Du die Elemente an das Array angefügt hast?:
PHP:
echo "<pre>";
print_r($pers);

snuu
 
Kann es sein das ich eher ein anderes Problem habe?

Also das kommt dabei raus, unsortiert (hab nun mal nur 5 der 15 Variablen eingefügt, ist übersichtlicher:

PHP:
Array
(
    [0] => Array
        (
        )

    [1] => test1
    [2] => 1
    [3] => 577
    [4] => 283
    [5] => 5
    [6] => 860
    [7] => test2
    [8] => 1
    [9] => 574
    [10] => 218
    [11] => 18
    [12] => 792
    [13] => test3
    [14] => 1
    [15] => 612
    [16] => 296
    [17] => 10
    [18] => 908
    [19] => test4
    [20] => 1
    [21] => 571
    [22] => 283
    [23] => 2
    [24] => 854
    [25] => test5
    [26] => 1
    [27] => 588
    [28] => 282
    [29] => 7
    [30] => 870
    [31] => test6
    [32] => 1
    [33] => 594
    [34] => 260
    [35] => 7
    [36] => 854
}

Das Array habe ich mit $pers=Array(Array()); deklariert (Darinliegt wohl der Fehler)

Sortiert kommt nun folgendes bei der ganzen Sache raus (nach 5 sortiert):

PHP:
Array
(
    [0] => 2
    [1] => 854
    [2] => 1
    [3] => 283
    [4] => 571
    [5] => Array
        (
        )

    [6] => 1
    [7] => 588
    [8] => 282
    [9] => 260
    [10] => 7
    [11] => 854
    [12] => 594
    [13] => 1
    [14] => 7
    [15] => 870
    [16] => 10
    [17] => 908
    [18] => 860
    [19] => 1
    [20] => 296
    [21] => 5
    [22] => 283
    [23] => 1
    [24] => 577
    [25] => 218
    [26] => 574
    [27] => 792
    [28] => 612
    [29] => 18
    [30] => 1
    [31] => test5
    [32] => test2
    [33] => test1
    [34] => test3
    [35] => test6
    [36] => test4

Kann es sein das mein Array eher in der Form:

pers[0][1] = test1

bis

pers[0][36] = xxxx steht?

Stimmt das mit dem Push nicht? Wenn er in meiner Schleife an die Push-Stelle kommt hängt er es an das Ende an, wenn er nun zum 2. mal an diese Stelle kommt sollte er ja nicht mehr auf pers[0] sondern auf pers[1] schreiben.......mhhh.......
Bestimmt ganz einfach aber naja...grins, danke :-)
 
Kann es sein das mein Array eher in der Form:

pers[0][1] = test1

bis

pers[0][36] = xxxx steht?
Nein, dein Array besitzt folgende Form:
$pers[0] = (leeres) Array
$pers[1] = 'test1'
$pers[2] = 1
...
$pers[36] = 854

Das Array sollte deshalb so gepusht werden:
PHP:
array_push($pers[0],  $name, $anzhspiele, ... );
array_push($pers[1],  $name, $anzhspiele, ... );
...

//bzw. in einer Schleife
for ($i = 0; $i < Anzahl der Daten; $i++) {
    array_push($pers[$i],  $name, $anzhspiele, ... );
}
 
Komisch, wenn ich mein Array mit array_push auch wie ihr beschrieben habt pushe kommt einfach nur shit dabei raus. Es befindet sich alles in einer Schleife, also fülle ich mein Array halt nun so (glaub komplizierter geht es nicht, aber funktioniert..lach)

PHP:
   $pers[$zaehler][0] = "$name";

   //Heimschnitt:
   $pers[$zaehler][1] = "$anzhspiele";
   $pers[$zaehler][2] = "$hvolleschnitt";
   $pers[$zaehler][3] = "$habraeumenschnitt";
   $pers[$zaehler][4] = "$hfehlwurfschnitt";
   $pers[$zaehler][5] = "$hgesamtschnitt";

   //Auswärtsschnitt:
   $pers[$zaehler][6] = "$anzaspiele";
   $pers[$zaehler][7] = "$avolleschnitt";
   $pers[$zaehler][8] = "$aabraeumenschnitt";
   $pers[$zaehler][9] = "$afehlwurfschnitt";
   $pers[$zaehler][10] = "$agesamtschnitt";

   //Gesamtschnitt:
   $pers[$zaehler][11] = "$anzspiele";
   $pers[$zaehler][12] = "$volleschnitt";
   $pers[$zaehler][13] = "$abraeumenschnitt";
   $pers[$zaehler][14] = "$fehlwurfschnitt";
   $pers[$zaehler][15] = "$gesamtschnitt";
      
   //Zähler +1
   
   $zaehler++;

Auch die Sortierung habe ich nun soweit hin bekommen dank snuu.
Nun habe ich nur noch eine bitte.

Sortierung erfolgt nach Gesamtschnitt ( [15]), wenn dieser gleich ist soll er nach [13] sortieren, wenn hier immernoch keine differenz nach 14].
lässt sich das so einfach machen? vielen dank für eure hilfe, echt klasse
 
Zurück