Eigene ksort() Funktion

Bash, Shell, PHP, Python, Perl, CGI
LoneWraith
Posts: 7
Joined: 2009-11-19 16:18

Eigene ksort() Funktion

Post by LoneWraith » 2010-08-29 21:36

Hallo,

ich bin nun schon eine Weile am Überlegen, wie ich selber eine Funktion schreiben könnte, die mir genau das gleiche erledigt, wie die fertige PHP Funktion ksort().

Das Array selbst das ich nach den Schlüsseln sortieren möchte, ist sehr klein (ca 10 Einträge) und die Schlüssel sind nur Ganzzahlen.

Habe überlegt das ganze per BubbleSort zu lösen, aber ich weis nicht wie ich die Schlüssel tauschen soll.
Mir geht es eigentlich nur darum, dass ich jeden einzelnen Sortierschritt ausgeben möchte.
Kann mir da jemand ein wenig Hilfe geben, wie ich die Schlüssel tauschen kann?

mfg
LW

Roger Wilco
Administrator
Administrator
Posts: 6001
Joined: 2004-05-23 12:53

Re: Eigene ksort() Funktion

Post by Roger Wilco » 2010-08-29 21:51

Wenn es dir nur um den Lerneffekt geht, kannst du einfach ein zweites Array erstellen, das die gewünschte Reihenfolge hat.

Ansonsten musst du auf die Array-Funktionen von PHP zurückgreifen (natürlich nicht *sort() ;) ), um das eigentliche Array in-place zu sortieren.
Last edited by Roger Wilco on 2010-08-29 21:51, edited 1 time in total.

LoneWraith
Posts: 7
Joined: 2009-11-19 16:18

Re: Eigene ksort() Funktion

Post by LoneWraith » 2010-08-30 19:17

Naja das Problem war wie schon geschrieben immer das Tauschen der Schlüssel. Habe es aber jetzt hinbekommen und möchte das natürlich hier hinschreiben, falls jemand solch eine ähnliche Funktion sucht:

Code: Select all

function array_flip_values($array, $id1, $id2) {
     $temp = array();
     foreach($array as $key=>$part) {
         if($key != $id1 && $key != $id2)
             $temp[$key] = $part;
         elseif($key == $id1)
             $temp[$id2] = $array[$id2];
         elseif($key == $id2)
             $temp[$id1] = $array[$id1];
     }
     return $temp;
 }

$iIdNew = 0;
$iIdCount = count($aArrayNew);
while($iIdNew < $iIdCount) {
   $aArrayNewIndexes = array_keys($aArrayNew);
   $aArrayNew = array_flip_values($aArrayNew, array_search($iIdNew, $aArrayNewIndexes), ($iIdNew++));
   next($aArrayNew);
}


Ist vieleicht nicht so optimal das ganze, aber es erledigt genau das was ksort erledigt. Man könnte sich dann den aktuellen Aufbau des Arrays innerhalb der Schleife immer ausgeben lassen.

LoneWraith
Posts: 7
Joined: 2009-11-19 16:18

Re: Eigene ksort() Funktion

Post by LoneWraith » 2010-08-30 20:35

matzewe01 wrote:Blöd gefragt, welchen Vorteil hat das ganze gegenüber ksort oder ging es nur um die Umsetzung an für sich?

Nunja der Vorteil ist einfach, dass man jetzt in einzelnen Schritten sortieren kann und diese ausgeben könnte. Also zB "tausche Element A mit Element B" usw, bis dann das Array vollständig sortiert ist.