fork(1) download
  1. <?php
  2. $array=array(0=>'a', 1=>'b', 2=>'c', 3=>'d');
  3.  
  4. print_r(move($array, 2, 'up'));
  5. print_r(move($array, 3, 'up'));
  6. print_r(move($array, 0, 'down'));
  7.  
  8. function move($array, $movingkey, $direction) {
  9. //Abbrechen, wenn der Key nicht exisiteiert
  10. if(!array_key_exists($movingkey, $array)) return $array;
  11.  
  12. $keys = array_keys($array); //Schlüsel extrahieren
  13. $pos = array_search($movingkey, $keys); //Position ermitteln
  14. unset($keys[$pos]); //Schlüssel aus Array entfernen
  15. $offset = $direction=='up' ? $pos+1 : $pos-1; //Offset berechnen
  16. if($offset > count($keys)) $offset=0; //EndOf Korrektur
  17. if($offset < 0) $offset=count($keys); //BeginOf Korrektur
  18. array_splice($keys, $offset, 0, $movingkey); //Key an neuer Position einfügen
  19. $retArr = array();
  20. foreach($keys as $key){ //Werte auf neue Positionen setzen
  21. $retArr[$key] = $array[$key];
  22. }
  23. $retArr = array_values($retArr); //Neu durchnummerieren
  24. return $retArr;
  25. }
  26. ?>
Success #stdin #stdout 0.01s 20568KB
stdin
Standard input is empty
stdout
Array
(
    [0] => a
    [1] => b
    [2] => d
    [3] => c
)
Array
(
    [0] => d
    [1] => a
    [2] => b
    [3] => c
)
Array
(
    [0] => b
    [1] => c
    [2] => d
    [3] => a
)