我有两个数组:
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']
答案 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;
}