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