Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

DeKugelschieber

Community-Fossil

  • »DeKugelschieber« ist der Autor dieses Themas

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

1

12.10.2011, 16:42

PHP 2D Array sortieren

Hi Leute,

ich bekomms gerade nicht hin ein 2D Array nach dem 2 Wert des 2 Arrays zu sortieren. Hier mal wie das aussieht:

Quellcode

1
2
3
4
5
$arr = array(array(1, 5), array(1, 3), array(2, 8));

// Ergebnis soll nachher sein:

$arr = array(array(1, 3), array(1, 5), array(2, 8));


Weiß einer wie ich das am besten hinbekomme?

DeKugelschieber

Community-Fossil

  • »DeKugelschieber« ist der Autor dieses Themas

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

2

12.10.2011, 16:51

Ähm naja, ich habs jetzt so gemacht: zweites 1D Array anlegen, Werte drin speichern (nur die nach dennen sortiert wird), dann mit asort() sortieren lassen (behält indices bei), dann einfach foreachen und werte zuweisen...

Naja vielleicht suchts ja mal einer ^^

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

3

12.10.2011, 16:57

Habe schon lange, sehr sehr lange nichts mehr mit PHP gemacht. Spontan hätte ich mir selbst was zum sortieren geschrieben. Wie viele Elemente hat dein Array denn? Wenns nicht viele sind hast du dir nen simplen sortier-Algorithmus ja in 2 Minuten zusammen geschrieben. Wenn es viele sind gibt es halt andere Möglichkeiten. Nimmste halt nen Quicksort oder Mergesort. Ist halt alles ne Speicherfrage, wobei ich bezweifle dass dort so viele Elemente drin sein werden, dass das wichtig wird. Naja und beim vertauschen achtest du halt immer schön drauf beide Werte zu vertauschen und nicht nur einen und fertig.

edit:
http://www.algorithmist.com/index.php/Qu…t_recursive.php hier mal ein PHP Quicksort. Muss halt nur noch angepasst werden, dass er beim verschieben der Elemente immer beide Werte verschiebt.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

DeKugelschieber

Community-Fossil

  • »DeKugelschieber« ist der Autor dieses Themas

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

4

12.10.2011, 17:04

Das funktioniert jetzt so ganz gut, die Anzahl der Werte kann aber schon extrem hoch sein. Kann ich nicht sagen, das ganze ist ein Statistikrechner bei dem man beliebig viele Werte eingeben kann.

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

5

12.10.2011, 17:29

Naja das hin- und herkopieren ist halt nicht besonders schön. Habe grad mit ein bisschen googlen recordSort gefunden. Das funktioniert auch bei 2d Arrays. Guck dir das sonst vielleicht noch mal an.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

jokester

Treue Seele

Beiträge: 125

Wohnort: Mainz

  • Private Nachricht senden

6

12.10.2011, 17:29

Quellcode

1
2
3
4
5
6
7
8
9
<?php
function compare($a, $b)
{
    return $a[1] - $b[1];
}

$arr = array(array(1, 5), array(1, 3), array(2, 8));
usort($arr, "compare");
?>

http://de2.php.net/manual/de/function.usort.php
"There is a theory which states that if ever anyone discovers exactly what the Universe is for and why it is here, it will instantly disappear and be replaced by something even more bizarre and inexplicable. There is another theory which states that this has already happened" -- Douglas Adams.

7

12.10.2011, 21:31

Quellcode

1
2
3
4
5
6
7
8
9
<?php
function compare($a, $b)
{
    return $a[1] - $b[1];
}

$arr = array(array(1, 5), array(1, 3), array(2, 8));
usort($arr, "compare");
?>

http://de2.php.net/manual/de/function.usort.php


Mist warst schneller. Ist aufjedenfall die richtige Lösung dafür.

DeKugelschieber

Community-Fossil

  • »DeKugelschieber« ist der Autor dieses Themas

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

8

12.10.2011, 21:32

Danke :)
Mann kann ja leider nicht jede Funktion kennen :/

DeKugelschieber

Community-Fossil

  • »DeKugelschieber« ist der Autor dieses Themas

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

9

13.10.2011, 15:51

Hab noch ein Problem:

Quellcode

1
2
3
4
5
function compare($a, $b){
            return $a[1]-$b[1];
        }
        
        usort($werte, "compare");


sortiert keine/falsch floats!?

z.B.: 0,16 0,17 0,17 0,18 0,22 0,28 0,4 0,55 0,6 0,88

wird zu:

Anzahl Wert
1 0.55
1 0.6
1 0.88
1 0.4
1 0.28
2 0.17
1 0.18
1 0.22
1 0.16

Warum?

Werbeanzeige