4

我有两个数组:

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

4 回答 4

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;
}
于 2013-08-01T17:20:33.197 回答
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
)
于 2013-08-01T17:18:30.967 回答
2
$C = call_user_func_array('array_merge', call_user_func_array('array_map', array(NULL, $A, $B)));
于 2013-08-01T20:41:00.217 回答
1

由于在 PHP 中数组被实现为哈希表(维基百科上的哈希表),因此您将无法比遍历数组更快地实现目标。

这是一个最简单的例子:

function interpolate(array $a,array $b) {
    $result = array();
    for($i = 0; $i < count($a); $i++) {
        $result[] = $a[$i];
        $result[] = $b[$i];
    }
    return $result;
}
于 2013-08-01T17:35:37.177 回答