<?php
$orders = array(1,2,3,4,5);
$index = 2;
$newOrder = 1; // 3,1,2,4,5
function reorder($index, $newOrder, $orders) {
$newOrders = array();
$newOrders[$index] = $newOrder;
$oldOrder = $orders[$index];
$lowers = array();
$uppers = array();
$direction = index - $newOrder;
foreach ($orders as $i => $v) {
if ($i < $index) {
$lowers[] = $i;
}
if ($i > $index) {
$uppers[] = $i;
}
}
if ($direction < 0) {
foreach ($lowers as $i => $v) {
$newOrders[$v] = $orders[$v] + 1;
}
foreach ($uppers as $i => $v) {
$newOrders[$v] = $orders[$v];
}
} else {
foreach ($uppers as $i => $v) {
$newOrders[$v] = $orders[$v] - 1;
}
foreach ($lowers as $i => $v) {
$newOrders[$v] = $orders[$v];
}
}
//ksort($newOrders);
var_dump($newOrders);
}
reorder($index, $newOrder, $orders);
preferences:
47.29 ms | 402 KiB | 5 Q