JesusFreak777
Erfahrenes Mitglied
Hallo,
mal wieder ein Array:
ich habe ein verschachteltes Array bei dem die keys einfach nur Zahlen sind. Diesmal brauch ich eine Funktion um einen Key zu verschieben.
hier habe ich leider gar keinen ansatz...
ich weiß zwar, wie man mit unset oder push, werte entfernt und wieder einfügt,... aber ich hab keinen plan, ich ich es schaffe einen wert "einfach" zu verschieben (es gibt zwei richtungen "up" & "down").
Nach oben kommt unten bzw. nach unten kommt oben (wenn ich den letzten wert nach unten verschiebe muss er auf platz 1)
eine sehr "unschöne" idee wäre:
es funktioniert... aber die schönste lösung ist es nicht...
Danke für jeden Tipp
mal wieder ein Array:
Code:
array(
1 => (array()),
2 => (array()),
3 => (array()),
...
)
ich habe ein verschachteltes Array bei dem die keys einfach nur Zahlen sind. Diesmal brauch ich eine Funktion um einen Key zu verschieben.
PHP:
function move($array. $movingkey, $direction) {
}
hier habe ich leider gar keinen ansatz...
ich weiß zwar, wie man mit unset oder push, werte entfernt und wieder einfügt,... aber ich hab keinen plan, ich ich es schaffe einen wert "einfach" zu verschieben (es gibt zwei richtungen "up" & "down").
Nach oben kommt unten bzw. nach unten kommt oben (wenn ich den letzten wert nach unten verschiebe muss er auf platz 1)
eine sehr "unschöne" idee wäre:
PHP:
function move($array, $movingkey, $direction) { //direction up oder egal :D ... beim movingkey müsste man wissen welche stelle im array
// $array = array_merge($array); //array erstmal schön durchnummerieren - voraussetzung das es bereits vorher gemacht ist, dann stimmt auch der movingkey
$max = count($array); //letzte stelle herausfinden
$new_array = array(); //sekundäres array erstellen
foreach($array as $key => $value) {
$new_key = ($key + 1) * 2; //werte verdoppeln, damit zwischenräume zwischen den eizelnen werten entstehen... (da 0 * 2 nicht möglich ist, habe ich vorher jeweils +1 gemacht <- nicht zwingend notwendig, aber schöner)
$new_array[$new_key] = $value;
}
$tkey = ($movingkey + 1) * 2; //der zu verschiebende key mit neuer sortierung
$temp = $new_array[$tkey]; //inhalt zwischenspeichern
unset($new_array[$tkey]); //zu verschiebenden key löschen
if($direction == "up") { //aufwärts
if($movingkey == 0) { //wenn oberster key
$tkey = ($max * 2) + 1; //dann auf höchsten key +1
$new_array[$tkey] = $temp; //zwischenspeicher auf neue position einfügen
} else {
$tkey = (($movingkey + 1) * 2 ) - 3; //key nach oben verschieben
$new_array[$tkey] = $temp; //zwischenspeicher auf neue position einfügen
}
} else {
if($movingkey == $max -1) { //wenn an höchster position
$new_array[1] = $temp; //zwischenspeicher auf 1. position einfügen
} else {
$tkey = (($movingkey + 1) * 2 ) + 3; //key nach unten verschieben
$new_array[$tkey] = $temp; //zwischenspeicher auf neue position einfügen
}
}
ksort($new_array); //array sortieren
return array_merge($new_array); //neu durchnummerieren
}
}
es funktioniert... aber die schönste lösung ist es nicht...
Danke für jeden Tipp