======[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
)