我想在每一步中通过两个元素反转一个数组。如果我有一个数组[11,12,13,14,15,16],我想反转前两个元素[11,12],然后反转另外两个元素[13,14]等。最终数组应该是[12,11,14,13,16,15];我的代码如下:
function reverseArray($array, $size){
$reversed_array = array();
$chunk = array_chunk($array, $size);
$chunk_length = count($chunk);
for($i = 0; $i < $chunk_length; $i++){
$reversed_array[$i] = array_reverse( ($chunk[$i]) );
}
return $reversed_array;
}
$array = array(12,13,14,15);
$size = 2;
print_r(reverseArray($array,$size));
Array
(
[0] => Array
(
[0] => 13
[1] => 12
)
[1] => Array
(
[0] => 15
[1] => 14
)
)
如何将这两个数组合并为一个?我试着使用array_merge,但不知道如何在函数中使用它。知道吗?
function reverseArray($array, $size){
$reversed_array = array();
$chunk = array_chunk($array, $size);
$chunk_length = count($chunk);
for($i = 0; $i < $chunk_length; $i++){
$reversed_array = array_merge($reversed_array,array_reverse( ($chunk[$i]) ));
}
return $reversed_array;
}
您可以使用call_user_func_array
、array_reverse
和array_chunk
来实现您的目标,如
$arr = [11,12,13,14,15,16];
$result = call_user_func_array('array_merge',array_reverse(array_chunk(array_reverse($arr), 2)));
print_r($result);
Fiddle
使用
$input = call_user_func_array('array_merge', $input);
使阵列变平
但是,你的代码可以简化如下,
function reverseArray($array, $size)
{
return call_user_func_array('array_merge', array_map('array_reverse', array_chunk($array, $size)));
}
一个常见的技巧是通过call_user_func_array
使用array_merge
。
$array = call_user_func_array("array_merge", $chunks);
它将以$chunks[0], $chunks[1], $chunks[…]
的任何列表作为参数来调用array_merge
。
你可以用array_map
同样简化你的arrayReverse函数,顺便说一句:
$chunks = array_chunk($array, $size);
$chunks = array_map("array_reverse", $chunks);