<?php
/* Build the array */
$result = [];
for($i=0;$i<4;$i++){
$result[] = [
'id' => $i + 1,
'title' => 'task '.($i + 1),
'tech_user_id' => 1,
'dev_priority' => $i + 1
];
}
/* Build the array ends */
function reArrange(&$result,$id,$new_dev_priority){
$curr_index = array_search($id,array_column($result,"id"),true);
$limit_index = array_search($new_dev_priority,array_column($result,"dev_priority"),true);
$process_node = $result[$curr_index];
$curr_dev_priority = $process_node['dev_priority'];
if($curr_dev_priority === $new_dev_priority) return; // return if same priority was assigned.
$offset = $curr_dev_priority > $new_dev_priority ? -1 : 1;
/* rearrange by relocating elements to a new location(this is a minimized push) */
while($curr_index != $limit_index){
$result[$curr_index] = $result[$curr_index + $offset];
$result[$curr_index]['dev_priority'] = $result[$curr_index]['dev_priority'] - $offset;
$curr_index += $offset;
}
$process_node['dev_priority'] = $new_dev_priority; // assign new dev priority
$result[$curr_index] = $process_node;
}
echo "Initial state:##########",PHP_EOL;
print_r($result);
reArrange($result,3,1);
echo "Rearranged state:##########",PHP_EOL;
print_r($result);
- Output for 7.1.25 - 7.1.27, 7.2.0 - 7.2.33, 7.3.0 - 7.3.33, 7.4.0 - 7.4.33, 8.0.0 - 8.0.30, 8.1.0 - 8.1.28, 8.2.0 - 8.2.18, 8.3.0 - 8.3.4, 8.3.6
- Initial state:##########
Array
(
[0] => Array
(
[id] => 1
[title] => task 1
[tech_user_id] => 1
[dev_priority] => 1
)
[1] => Array
(
[id] => 2
[title] => task 2
[tech_user_id] => 1
[dev_priority] => 2
)
[2] => Array
(
[id] => 3
[title] => task 3
[tech_user_id] => 1
[dev_priority] => 3
)
[3] => Array
(
[id] => 4
[title] => task 4
[tech_user_id] => 1
[dev_priority] => 4
)
)
Rearranged state:##########
Array
(
[0] => Array
(
[id] => 3
[title] => task 3
[tech_user_id] => 1
[dev_priority] => 1
)
[1] => Array
(
[id] => 1
[title] => task 1
[tech_user_id] => 1
[dev_priority] => 2
)
[2] => Array
(
[id] => 2
[title] => task 2
[tech_user_id] => 1
[dev_priority] => 3
)
[3] => Array
(
[id] => 4
[title] => task 4
[tech_user_id] => 1
[dev_priority] => 4
)
)
- Output for 8.3.5
- Warning: PHP Startup: Unable to load dynamic library 'sodium.so' (tried: /usr/lib/php/8.3.5/modules/sodium.so (libsodium.so.23: cannot open shared object file: No such file or directory), /usr/lib/php/8.3.5/modules/sodium.so.so (/usr/lib/php/8.3.5/modules/sodium.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
Initial state:##########
Array
(
[0] => Array
(
[id] => 1
[title] => task 1
[tech_user_id] => 1
[dev_priority] => 1
)
[1] => Array
(
[id] => 2
[title] => task 2
[tech_user_id] => 1
[dev_priority] => 2
)
[2] => Array
(
[id] => 3
[title] => task 3
[tech_user_id] => 1
[dev_priority] => 3
)
[3] => Array
(
[id] => 4
[title] => task 4
[tech_user_id] => 1
[dev_priority] => 4
)
)
Rearranged state:##########
Array
(
[0] => Array
(
[id] => 3
[title] => task 3
[tech_user_id] => 1
[dev_priority] => 1
)
[1] => Array
(
[id] => 1
[title] => task 1
[tech_user_id] => 1
[dev_priority] => 2
)
[2] => Array
(
[id] => 2
[title] => task 2
[tech_user_id] => 1
[dev_priority] => 3
)
[3] => Array
(
[id] => 4
[title] => task 4
[tech_user_id] => 1
[dev_priority] => 4
)
)
preferences:
152.56 ms | 405 KiB | 158 Q