我试图移动数组的最后三个元素,成为前三个元素。这可能吗?数组是可变的,具体取决于您所在的页面,但它看起来像这样:
Array
(
[4] => 1
[2] => 2
[3] => 6
[5] => 9
[0] => 10
[1] => 11
)
我需要它:
Array
(
[5] => 9
[0] => 10
[1] => 11
[4] => 1
[2] => 2
[3] => 6
)
任何帮助将不胜感激。阵列的长度也会因页面而异,所以我不能100%确定如何去做。
答案 0 :(得分:2)
请注意array_splice
不会保留数字键(根据OP示例的情况)。如果您需要,也可以这样做:
$array1 = array
(
4 => 1,
2 => 2,
3 => 6,
5 => 9,
0 => 10,
1 => 11
);
$array2 = array_slice($array1, -3, 3, true) + $array1;
$ array2将是:
Array
(
[5] => 9
[0] => 10
[1] => 11
[4] => 1
[2] => 2
[3] => 6
)
答案 1 :(得分:1)
array_splice()
用于提取和插入数组中的元素序列。
array_splice($array, 0, 0, array_splice($array, -3));
array_splice($array, -3)
删除数组的最后3个元素并将其作为数组返回。然后array_splice($array, 0, 0, <that>)
将该数组插入数组的开头。
请注意,这不会保留关联数组的键,这在您的示例中似乎是必需的。为此,您可以使用documentation notes
中定义的array_rotate
函数
function array_rotate($array, $shift) {
if(!is_array($array) || !is_numeric($shift)) {
if(!is_array($array)) error_log(__FUNCTION__.' expects first argument to be array; '.gettype($array).' received.');
if(!is_numeric($shift)) error_log(__FUNCTION__.' expects second argument to be numeric; '.gettype($shift)." `$shift` received.");
return $array;
}
$shift %= count($array); //we won't try to shift more than one array length
if($shift < 0) $shift += count($array);//handle negative shifts as positive
return array_merge(array_slice($array, $shift, NULL, true), array_slice($array, 0, $shift, true));
}