以块的形式反转数组

时间:2015-07-04 11:40:45

标签: php arrays

我想在每一步中用两个元素反转一个数组。如果我有一个数组[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但不知道如何在我的函数中使用它。有什么想法吗?

4 个答案:

答案 0 :(得分:1)

您可以call_user_func_arrayarray_reversearray_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

答案 1 :(得分:1)

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;
}

答案 2 :(得分:0)

使用

$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)));
}

答案 3 :(得分:0)

一个常见的诀窍是通过array_merge使用call_user_func_array

$array = call_user_func_array("array_merge", $chunks);

array_merge作为参数调用$chunks[0], $chunks[1], $chunks[…]

您可以使用array_map同样简化arrayReverse函数,btw:

$chunks = array_chunk($array, $size);
$chunks = array_map("array_reverse", $chunks);