Page 1 of 1

Eigene ksort() Funktion

Posted: 2010-08-29 21:36
by LoneWraith
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

Re: Eigene ksort() Funktion

Posted: 2010-08-29 21:51
by Roger Wilco
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.

Re: Eigene ksort() Funktion

Posted: 2010-08-30 19:17
by LoneWraith
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.

Re: Eigene ksort() Funktion

Posted: 2010-08-30 20:35
by LoneWraith
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.