Kompliz. Sortieren in multidim Array

Ich habe ein Array mit folgemdem Aufbau:

key = id (für DB)

Array[0] = Trefferanzahl
Array[1] = binär verschlüsselt was gefunden wurde

Jetzt will ich das sortieren und zwar erst nach den Treffern und 2. nach den Keys.

Da gibts ja nun multisort:

array_multisort($array[0], SORT_NUMERIC, SORT_DESC);

Womit man die Treffer schonmal sortieren kann, aber wie bekomme ich jetzt die keys (also ids) sortiert?

Muss leider PHP4 benutzen, sonst könnte ich ja vielleicht array_combine nutzen um die Keys ins Array zu bekommen, aber so…

Wäre ja alles nicht so schlimm, aber bei einem Seitenreload erscheinen die Treffer ja in anderer Reihenfolge als zuvor, weil halt nicht sortiert.

Danke schonmal

Dario

array_keys()
sollte Dir evtl helfen.

allerdings denke ich wäre bei Dir ein while…each angebrachter…

z.B. so:

while (list ($key, $val) = each ($\_POST)) {
 echo "$key =\> $val
\n";
}

sollte eigentlich auch bei sortierten arrays funktionieren…

while (list ($key, $val) = each ($_POST)) {
echo „$key => $val
\n“;
}

äh, was hat das jetzt mit meinem Problem zu tun? Es geht doch nicht um die Ausgabe, sondern um die Sortierung…

dann verfasse Deine Frage deutlicher
Du hast nur eine Trefferanzahl also nimm die raus aus dem array um richtig zu sortieren.

und ansonsten haste doch eh schon einen der Befehle um ein Array zu sortieren.
die anderen findeste sicher auch noch…

und ansonsten haste doch eh schon einen der Befehle um ein
Array zu sortieren.
die anderen findeste sicher auch noch…

na eben nicht, sonst würde ich doch nicht fragen

Du hast nur eine Trefferanzahl also nimm die raus aus dem
array um richtig zu sortieren.

und wie?

das Problem vielleicht nochmal:

Wie gesagt steht in dem Array an erster Positon die Trefferanzahl, wonach ich ja schonmal sortiert bekomme, aber ich habe wirklich keine Ahnung wie ich dann noch nach den Keys als „Untersortierung“ sortieren soll… Also so mein ich das:
10 Treffer
Key 5
10 Treffer
Key 4
8 Treffer
Key 7
8 Treffer
Key 3

hiho seawulf,

na eben nicht, sonst würde ich doch nicht fragen

das Problem vielleicht nochmal:

Wie gesagt steht in dem Array an erster Positon die
Trefferanzahl, wonach ich ja schonmal sortiert bekomme, aber
ich habe wirklich keine Ahnung wie ich dann noch nach den Keys
als „Untersortierung“ sortieren soll… Also so mein ich das
10 Treffer
Key 5
10 Treffer
Key 4
8 Treffer
Key 7
8 Treffer
Key 3

aha! wie waere es wenn du dann einfach beim ersten sortiervorgang die dinger in ein neues array sortierst. etwa so:

while(mir\_nichts\_einfaellt)// irgendeine sortierbedingung
{
if(!isset(bla[Trefferanzahl]))
 {
 bla[Trefferanzahl]=array(); // falls noch nicht initialisiert
 }
ein\_array[key]=value; // hier kann dann noch mehr folgen
ein\_array[noch\_ein\_key]=noch\_ein\_value;
.
.
.
bla[Trefferanzahl]=ein\_array;
}

// und jetzt sortierst du einfach nur noch, am schoensten waere es das 
// wenn das oben schon eingebaut waere, dann muessen wir nicht zweimal // durch
while(list(trefferanzahl, keys)=each(bla))
{
bla[trefferanzahl]=sort(value);
}

und voila, fertig!

hth josh

das versteh ich jetzt überhaupt nicht, nicht mal ansatzweiße…
Irgendwie habe ich auch die Vermutung, dass das immer noch am Ziel vorbei ist oder ich bin zu blöd dafür.

Ich habe jetzt, da das Array eh nochmal umgebaut wird, den key mit in das Array reingenommen, also haben wir ein multi-Array nach folgender Bauart (ich hab mir das mal ausgeben lassen und nachgebaut):
array(
array(1, 1, 137),
array(1, 1, 138),
array(1, 1, 140),
array(1, 1, 141),
array( 1, 1, 142),
array(1, 1, 146),
array(1, 1, 147),
array(1, 1, 148),
array(1, 1, 152),
array( 1, 4, 1000),
array(1, 4, 1501),
array(2, 5, 145),
array(3, 7, 143),
array(3, 7, 149),
array(3, 7, 151)
);

und das Teil brauche ich sortiert nach dem 1. und dem 3.

Vielleicht irgendwie so:

function arraysort($array){
$new = array();
$max = count($array);
$springer;
for($i=0; $i

°oO( nichts anderes hatte ich erwartet )
erst mal paar Links…
http://php.belnet.be/manual/de/function.sort.php
http://php.belnet.be/manual/de/function.arsort.php
http://php.belnet.be/manual/de/function.ksort.php
http://php.belnet.be/manual/de/function.natsort.php
http://php.belnet.be/manual/de/function.natcasesort.php
http://php.belnet.be/manual/de/function.rsort.php
http://php.belnet.be/manual/de/function.usort.php
http://php.belnet.be/manual/de/function.array-multis…
http://php.belnet.be/manual/de/function.uksort.php

ein multidimensionales Array solltest Du tunlichst vermeiden für Deine Zwecke - aber Du willst ja offenbar nicht auf mich hören dass Du mehrere arrays machst und die dann z.B. mit asort() sortierst - gleiche Indices behalten dabei den zusammenhang der Werte…

erst mal paar Links…
http://php.belnet.be/manual/de/function.sort.php
http://php.belnet.be/manual/de/function.arsort.php
http://php.belnet.be/manual/de/function.ksort.php
http://php.belnet.be/manual/de/function.natsort.php
http://php.belnet.be/manual/de/function.natcasesort.php
http://php.belnet.be/manual/de/function.rsort.php
http://php.belnet.be/manual/de/function.usort.php
http://php.belnet.be/manual/de/function.array-multis…
http://php.belnet.be/manual/de/function.uksort.php

hm, na die Methoden kenne ich auch - dort geister ich die ganze Zeit rum, aber die nützen mir doch nichts… bis auf multisort - aber der will nicht funzen

ein multidimensionales Array solltest Du tunlichst vermeiden
für Deine Zwecke - aber Du willst ja offenbar nicht auf mich
hören dass Du mehrere arrays machst und die dann z.B. mit
asort() sortierst - gleiche Indices behalten dabei den
zusammenhang der Werte…

Das höre ich jetzt aber zum ersten mal. Wieso sollte ich das vermeiden?

Und ich versteh auch nicht, wie mir einzelne Arrays da weiter helfen sollen.

Wenn die Werte in 3 Arrays rum hängen die von mir aus auch die gleichen Keys haben, Wie soll ich DAS GANZE dann im Zusammenhang sortieren? Ich will doch nicht Array A für sich und Array B für sich sortiert haben.

Also brauche ich doch wohl eine Methode die alle 3 Arrays oder 1 multiArray gleichzeitig sortiert und zwar nummerisch nach 1. und untergeordnet nach 3. der Arrays…

Entweder reden wir hier die ganze Zeit an einander vorbei oder … Versteht Ihr oder Ich nur was falsch?

offenbar erklärst Du falsch
aber wenn Du sagen würdest woher Dein array überhaupt kommt dann könnte man das vielleicht ja auch schon viel einfacher angehen…

also wenn ich Dich jetzt richtig verstanden habe brauchst Du quasi ein
Select * from xyz where bla=bla ORDER BY key2 ASC, key3 ASC
nur auf arrayebene…?

Jaaaaaaaa, genau genau. - hätte ich ja auch mal drauf kommen können das so zu erklären. :smile: … außer das es DESC bei beiden ist.

Ja, ich weiß, ich kann solche Probleme nicht erklären, I’m Sorry.

Wo das Array her kommt? ähhh, das bastel ich mir selber, jetzt aber bitte nicht verlangen, dass ich das nochmal umbaue, die Ermittlung von dem Array geht über 600 Zeilen, weil da so ca. 15 Variablen/Kriterien rein spielen.

Aber ich mein, ich kann das ja nu im nachhinein umbauen wies beliebt, weil ich das eh machen muß (wegen prozentualer Übereinstimmung und Trefferbegrenzung).

Also mal so kurz was das ist: Das ist praktisch für eine Trefferliste in der über den ersten Arrayeintrag die prozentuale Übereinstimmung mit den Suchkriterien ermittelt wird. Im 2. Arrayeintrag steht binär verschlüsselt, welche Kriterien aus Suchanfrage und DB übereinsgestimmt haben.

Der Key ist gleichzeitig die ID aus der Datenbank. Die hab ich nun aber auch als 3. Arrayeintrag, wenn das was nützt.

Und der Benutzer soll praktisch eine Trefferliste vorfinden, wo die 100%-Treffer als erstes und absteigend der Rest kommt. Innerhalb von gleichen Trefferprozenten sollen die Einträge nach ID absteigend sortiert sein.

Soooo, jaaaa, was noch… äh … keine Ahnung was soll ich da noch dran rum erklären. So ein Array hatte ich ja schon gepostet, wie das dann praktisch aussieht.

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]