<?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 = 0;
foreach ($orders as $i => $v) {
if ($i < $index) {
$lowers[] = $i;
}
if ($i > $index) {
$uppers[] = $i;
}
if ($i === $index) {
$direction = $i - $newOrder;
}
}
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:
42.76 ms | 402 KiB | 5 Q