Hallo Leute,
mittlerweile habe ich eine Lösung für mein - zugegeben schlecht beschriebenes - Problem gefunden. Ich habe zwei Funktionen geschrieben, mit denen man Array-Elemente nach oben, bzw. unten verschieben kann. Für alle die es interessiert hier ein Beispielskript:
1 <?php
2
3 $array = array(
4 'foo1' => 'Hallo',
5 'bar2' => 'Welt',
6 'baz3' => 'Du',
7 'blk4' => 'Mök',
8 'fmp5' => 'Blb'
9 );
10
11 echo '<pre>';
12 print_r(array_move_down($array, 'fmp5', 0));
13 echo '</pre>';
14
15 //Ein Element anhand des Schlüssels um eine Position nach oben schieben
16 function array_move_up($array, $key, $beam = false) {
17
18 //Wenn es den Schlüssel nicht gibt, dann nichts tun
19 if (!isset($array[ $key ])) return $array;
20
21 $keys = array_keys( $array );
22 $offs = array_flip( $keys );
23 $prev_key = $keys[ $offs[ $key ] -1 ];
24
25 //Wenn kein Vorgänger vorhanden und nicht "gebeamt" werden soll, dann nichts tun
26 if ((!$prev_key) && (!$beam)) return $array;
27
28 //Wenn kein Vorgänger vorhanden, aber "gebeamt" werden soll, dann das erste Element ans Ende hängen
29 if ((!$prev_key) && ($beam)) {
30 $value = array_shift($array);
31 $array[ $key ] = $value;
32 return $array;
33 }
34
35 $new_array = array();
36
37 foreach ($array AS $k => $v) {
38 if ($k != $prev_key) {
39 $new_array[ $k ] = $v;
40 } else {
41 $prev_value = $v;
42 }
43
44 if ($k == $key) {
45 $new_array[ $prev_key ] = $prev_value;
46 }
47 }
48
49 return $new_array;
50 }
51
52 //Ein Element anhand des Schlüssels um eine Position nach unten schieben
53 function array_move_down($array, $key, $beam = false) {
54 return array_reverse( array_move_up(array_reverse($array),$key,$beam) );
55 }
56
57 ?>
Die Funktion array_move_down() ist ein billiger Abklatsch und kehrt zweimal Array um, aber für meine Belange reicht es erstmal und es ist einfacher zu pflegen.
Wenn Ihr Verbesserungen dazu habt, könnt Ihr ja gerne posten.
viele Grüsse
Achim Schrepfer