将最后三个元素从php数组移到前三个

时间:2016-04-05 02:08:02

标签: php arrays

我试图移动数组的最后三个元素,成为前三个元素。这可能吗?数组是可变的,具体取决于您所在的页面,但它看起来像这样:

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%确定如何去做。

2 个答案:

答案 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));
}
相关问题