我目前正在尝试构建一个复杂的函数,以对PHP数组中定义的某些节(div)的位置重新排序。
例如,我在这里有这个数组:
$sections = array(
0 => 'section_one',
1 => 'section_two',
2 => 'section_three',
3 => 'section_four',
4 => 'section_five',
5 => 'section_six',
6 => 'section_seven'
);
结果如下:
array(7) { [0]=> string(11) "section_one" [1]=> string(11) "section_two" [2]=> string(13) "section_three" [3]=> string(12) "section_four" [4]=> string(12) "section_five" [5]=> string(11) "section_six" [6]=> string(13) "section_seven" }
当用户现在在我的网站上将第二部分的第六部分移到第一部分时,我需要将第六部分的键更改为1,并将每个键向后移动一个数字。因此section_two
成为密钥2
,依此类推...
有人知道我该怎么做吗?我知道我可以这样替换键:
$arr[ $newkey ] = $arr[ $oldkey ];
unset( $arr[ $oldkey ] );
当用户完成元素移动后,我知道了section_six之类的名称以及该元素的新位置。
重新排列/重新放置键之后,数组必须如下所示:
$sections_a = array(
0 => 'section_one',
1 => 'section_six',
2 => 'section_two',
3 => 'section_three',
4 => 'section_four',
5 => 'section_five',
6 => 'section_seven'
);
答案 0 :(得分:2)
一种选择是复制数组并使用array_splice
$sections = array(
0 => 'section_one',
1 => 'section_two',
2 => 'section_three',
3 => 'section_four',
4 => 'section_five',
5 => 'section_six',
6 => 'section_seven'
);
$oldkey = 5;
$newkey = 1;
$sections_a = $sections;
array_splice( $sections_a, $newkey, 0, array_splice( $sections_a, $oldkey, 1) );
这将导致:
Array
(
[0] => section_one
[1] => section_six
[2] => section_two
[3] => section_three
[4] => section_four
[5] => section_five
[6] => section_seven
)
答案 1 :(得分:1)
我看到@Eddie提供了比我更好的解决方案,谢谢Eddie, 但是这是我为此创建的自定义函数,如果它可以帮助任何人。
// This function returns the new array
function reindexArray($array, // Array
$index, // Index of the value that you to change the index of
$indexToMove) // Index that you want to move that value
{
// Store the value to be reindex in a variable
$reIndexedValue = $array[$index];
// Remove that value from the array
unset($array[$index]);
// Reorder the original array
$oldArrayInOrder = array_values($array);
// Create a new array
$newArray = array();
// Now reindex all the value into the new array in the proper order
for ($j=0, $i=0; $i < count($oldArrayInOrder)+1; $i++) {
if($i == $indexToMove)
{
$newArray[$i]=$reIndexedValue;
continue;
}
else
{
$newArray[$i] = $oldArrayInOrder[$j];
$j++;
}
}
return($newArray);
}