======[PHP] Reorder Array====== =====Ausgangslage===== Diese Klasse erstellte ich aufgrund einer [[http://www.tutorials.de/php/370687-problem-array-sortieren.htmlm Anfrage im Tutorials-Forum]]. ich habe ein array mit Bildern die aus einem Ordner ausgelesen werden. Die haben eine feste Reihenfolge: 1,2,3,4,5,6 Jetzt brauche ich aber das Array ein wenig anders. Der Startpunkt soll sozusagen geändert werden. Bsp: 4,5,6,1,2,3 oder 2,3,4,5,6,1 Und nun meine, natürlich für dieses Beispiel viel zu ausführliche, Lösung =====Die Klasse Reorder===== array = $array; //Index über die Schlüssel legen $this->index = array_keys($array); } /** * ändert die Reihenfolge. Beginnt den Array mit dem Eintrag mit der Position $offset * des Ausgangsarrays und hängt die vorgelagerten Einträge in unveränderter Reihenfolge hinten an * @param $offset Long * @return Array oder false */ public function byOffset($offset){ //Test ob $offset nicht grössr als die Anzahl items ist if(count($this->array)-1 < abs($offset)) return false; //Der Anfang des neuen Arrays extrahieren $startArray = array_slice($this->array, $offset, count($this->array) - $offset, true); //Das Ende des neuen Arrays extrahieren $endArray = array_slice($this->array, 0, $offset, true); //Die beiden Teile zusammensetzen und zurückgeben return $startArray +$endArray; } /** * ändert die Reihenfolge analog zu rorderByOffset. sucht jedoch nach dem key * @param $startKey Variant * @return Array oder false */ public function byKey($startKey){ //Das Offset des Keys bestimmen $offset = array_search($startKey, $this->index); //Die reorder-Funktion nach Offset anwenden return ($offset ===false) ? false : $this->byOffset($offset); } /** * ändert die Reihenfolge analog zu rorderByOffset. sucht jedoch nach dem Wert * @param $startValue Variant * @return Array oder false */ public function byValue($startValue){ //Schlüssel des Wertes bestimmen $key = array_search($startValue, $this->array); //die reorder-Funktion nach key anwenden return ($key ===false) ? false : $this->byKey($key); } protected static function getInstanceOf($array){ return new self($array); } public static function staticByOffset($array, $offset){ return self::getInstanceOf($array)->byOffset($offset); } public static function staticByKey($array, $startKey) { return self::getInstanceOf($array)->byKey($startKey); } public static function staticByValue($array, $startValue){ return self::getInstanceOf($array)->byValue($startValue); } } ?> =====Ein Testscript===== 'AA', 'b' => 'BB', 'c' => 'CC', 'd' => 'DD', 'e' => 'EE', 'f' => 'FF', 'g' => 'GG', 'h' => 'HH'); //Testaufrufe der Funktion: //Nach Index 4: Erste Paarung: 'e'=>'EE' print("Nach Index 4:\n"); print_r(reorder_by_offset($array, 4)); //Nach Schlüssel: Erste Paarung 'f' => 'FF' $reorder = new Reorder($array); print("Nach Schlüssel f:\n"); print_r($reorder->byKey('f')); //Nach Value: Erste Paarung 'c'=>'CC' print("Nach Wert CC:\n"); print_r($reorder->byValue('CC')); ?> =====Die Ausgabe des Testscriptes===== Nach Index 4: Array ( [e] => EE [f] => FF [g] => GG [h] => HH [a] => AA [b] => BB [c] => CC [d] => DD ) Nach Schlüssel f: Array ( [f] => FF [g] => GG [h] => HH [a] => AA [b] => BB [c] => CC [d] => DD [e] => EE ) Nach Wert CC: Array ( [c] => CC [d] => DD [e] => EE [f] => FF [g] => GG [h] => HH [a] => AA [b] => BB )