Как изменить позицию элементов массива с определённого ключа PHP. Способов несколько. Я долго думал как сделать подобный скрипт. В итоге придумал функцию для смены позиции. В результате работы функции позиция элемента меняется, а следующие элементы массива сдвигаются на один шаг. Не важно где будет элемент массива! Функция пересчитает ключи массива.
$arr = range(1, 10);
/*
change_position()
$arr - основной массив, ключ - позиция, значение - id
$num - номер, который нужно переместить
$pos - позиция, куда нужно переместить
*/
function change_position($arr, $num, $pos)
{
$pos -= 1;
$select_arr[] = $arr[$num];
unset($arr[$num]);
$arr1 = array_slice($arr, 0, $pos);
$arr2 = array_slice($arr, $pos);
$arr = array_merge($arr1, $select_arr, $arr2);
// добавляем 1 к каждому ключу, первый ключ массива равен 1
foreach($arr as $k => $v)
{
$arr_plus[$k + 1] = $v;
unset($arr[$k]);
}
// в этом случае первый ключ будет равен 0
//$arr_plus = array_values($arr);
return $arr_plus;
}
$arr1 = change_position($arr, 1, 5);
//print_r($arr);
print_r($arr1);
/*
Вывод:
Array
(
[1] => 1
[2] => 3
[3] => 4
[4] => 5
[5] => 2
[6] => 6
[7] => 7
[8] => 8
[9] => 9
[10] => 10
)
*/
Обратите внимание на вывод массива. Переданная третьим входным параметром число 5 изменит положение значения массива. Половина ключей (6-10) пересчитается. Весь фокус в том, что массив разрезается на 2 части. Потом между двумя отрезанными массивами вставляем элемент массива. Далее происходит сборка всех 3 массивов. О массивах PHP читайте в статье массив в PHP