如何插入两个数组?

时间:2013-08-01 17:09:38

标签: php arrays

我有两个数组:

A = [1, 2, 3, 4]
B = ['a', 'b', 'c', 'd']

我想将它们合并到一维数组中的元组(A,B)中:

C = [1, 'a', 2, 'b', 3, 'c', 4, 'd']

PHP中是否有一些本机函数允许您以这种方式插入两个数组?如果没有,那么循环是最有效和最有效的方式吗?

A的元素数量始终与B相同。

注意:如果有帮助,在我的特定需求的上下文中,数组A可以概括为单个值(因为B中的所有值的值都相同)。

A = 1
B = ['a', 'b', 'c', 'd']
C = [1, 'a', 1, 'b', 1, 'c', 1, 'd']

4 个答案:

答案 0 :(得分:4)

在这种情况下循环是正常的,因为PHP没有交错2个数组的本机函数,但这是解决问题的好方法:

function interleave($array1, $array2) {
    $result = array();
    array_map(function ($e1, $e2) use (&$result) {
        array_push($result, $e1, $e2);
    }, $array1, $array2);
    return $result;
}

答案 1 :(得分:3)

我不知道是否有任何内置的映射函数可以使这更容易,但这是一个简单,天真的实现。

$a = array(1,2,3,4);
$b = array('a','b','c','d');

function array_interpolate($a, $b) {
    if (sizeof($a) != sizeof($b))
        throw new Exception('Arrays must be of same size');

    $result = array();
    for ($i = 0, $l = sizeof($a); $i < $l; $i++) {
        $result[2*$i] = $a[$i];
        $result[2*$i+1] = $b[$i];
    }
    return $result;
}

$res = array_interpolate($a, $b);
print_r($res);

以上返回

Array
(
    [0] => 1
    [1] => a
    [2] => 2
    [3] => b
    [4] => 3
    [5] => c
    [6] => 4
    [7] => d
)

答案 2 :(得分:2)

$C = call_user_func_array('array_merge', call_user_func_array('array_map', array(NULL, $A, $B)));

答案 3 :(得分:1)

由于PHP数组是作为哈希表(Hash table on wikipedia)实现的,因此您无法更快地实现目标,然后循环遍历数组。

这是一个最简单的例子:

function interpolate(array $a,array $b) {
    $result = array();
    for($i = 0; $i < count($a); $i++) {
        $result[] = $a[$i];
        $result[] = $b[$i];
    }
    return $result;
}