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

将最后三个元素从php数组移动到前三个,php,arrays,Php,Arrays,我试图移动数组的最后三个元素,成为前三个元素。这可能吗?数组是可变的,这取决于您所处的页面,但它的外观如下所示: Array ( [4] => 1 [2] => 2 [3] => 6 [5] => 9 [0] => 10 [1] => 11 ) 我需要的是: Array ( [5] => 9 [0] => 10 [1] => 11 [4] => 1

我试图移动数组的最后三个元素,成为前三个元素。这可能吗?数组是可变的,这取决于您所处的页面,但它的外观如下所示:

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%确定如何处理。

用于提取和插入数组中的元素序列

array_splice($array, 0, 0, array_splice($array, -3));
array\u splice($array,-3)
删除数组的最后3个元素并将其作为数组返回。然后
array\u拼接($array,0,0,)
在数组的开头插入该数组

请注意,这不会保留关联数组的键,这在您的示例中似乎是必要的。为此,可以使用中定义的
array\u rotate
函数

函数数组旋转($array,$shift){ 如果(!is_数组($array)| |!is_数值($shift)){ if(!is_array($array))错误_日志(_函数要求第一个参数为array;'。gettype($array)。'received'); 如果(!is_numeric($shift))错误日志(__函数要求第二个参数为数值;'.gettype($shift)。“`shift`已收到'); 返回$array; } $shift%=count($array);//我们不会尝试移动超过一个数组长度 if($shift<0)$shift+=count($array);//将负移位处理为正移位 返回array_merge(array_slice($array,$shift,NULL,true),array_slice($array,0,$shift,true)); } 用于提取和插入数组中的元素序列

array_splice($array, 0, 0, array_splice($array, -3));
array\u splice($array,-3)
删除数组的最后3个元素并将其作为数组返回。然后
array\u拼接($array,0,0,)
在数组的开头插入该数组

请注意,这不会保留关联数组的键,这在您的示例中似乎是必要的。为此,可以使用中定义的
array\u rotate
函数

函数数组旋转($array,$shift){ 如果(!is_数组($array)| |!is_数值($shift)){ if(!is_array($array))错误_日志(_函数要求第一个参数为array;'。gettype($array)。'received'); 如果(!is_numeric($shift))错误日志(__函数要求第二个参数为数值;'.gettype($shift)。“`shift`已收到'); 返回$array; } $shift%=count($array);//我们不会尝试移动超过一个数组长度 if($shift<0)$shift+=count($array);//将负移位处理为正移位 返回array_merge(array_slice($array,$shift,NULL,true),array_slice($array,0,$shift,true)); }
请注意,
数组拼接
不保留数字键(根据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
)

请注意,
array\u 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
)

尝试在临时数组中弹出并添加这3个项目,然后使用array_unshift()对它们进行预处理。这只是一个友好的提示,您可能需要阅读本页:这样您就可以始终确保您的问题易于回答且尽可能清楚。请确保包括您为解决问题所做的任何努力,以及在尝试这些修复时发生的情况。另外,不要忘记查看您的代码和任何错误消息!尝试在临时数组中弹出并添加这3个项目,然后使用array_unshift()对它们进行预处理。这只是一个友好的提示,您可能需要阅读本页:这样您就可以始终确保您的问题易于回答且尽可能清楚。请确保包括您为解决问题所做的任何努力,以及在尝试这些修复时发生的情况。另外,不要忘记查看您的代码和任何错误消息@没错,它不会保留钥匙。我添加了一个函数,它不保留关键点。我添加了一个函数,它可以。