我有两个数组:
Array
(
[0] => 5
[1] => 4
)
Array
(
[0] => BMW
[1] => Ferrari
)
我想得到那个结果。用相同的键合并值
Array
(
[0] => Array
(
[0] => 5
[1] => BMW
)
[1] => Array
(
[0] => 4
[1] => Ferrari
)
)
我该怎么做?是否有任何本机PHP
函数可以做到这一点?我尝试了array_merge_recursive
和array_merge
,但没有得到预期的结果
答案 0 :(得分:3)
关于@ splash58评论:
您可以使用array-map。这里是一个例子:
$array = [["5", "4"], ["BMW", "Ferrari"]];
$res = array_map(null, ...$array);
现在res
将包含:
Array
(
[0] => Array
(
[0] => 5
[1] => BMW
)
[1] => Array
(
[0] => 4
[1] => Ferrari
)
)
如果数组包含2个不同的变量,则可以使用:
$res= array_map(null, ["5", "4"], ["BMW", "Ferrari"]);
答案 1 :(得分:0)
<?php
$a = array();
$a[0] = '5';
$a[1] = '4';
$b = array();
$b[0] = 'BMW';
$b[1] = 'Ferrari';
merge_by_key($a, $b);
function merge_by_key($a, $b){
$c = array();
fill_array($c,$a);
fill_array($c,$b);
print_r($c);
}
function fill_array(&$c, $a) {
foreach ($a as $key => $value){
if(isset($c[$key])) {
array_push($c[$key], $value);
} else {
$c[$key] = array($value);
}
}
}
输出:
Array
(
[0] => Array
(
[0] => 5
[1] => BMW
)
[1] => Array
(
[0] => 4
[1] => Ferrari
)
)
答案 2 :(得分:0)
您可以使用带有null的array_map作为第一个参数(手册中有一个示例),以得到所需的结果:
<?php
$nums = [0 => 5, 1 => 4];
$cars = [0 => 'BMW', 1 => 'Ferrari'];
var_export(array_map(null, $nums, $cars));
输出:
array (
0 =>
array (
0 => 5,
1 => 'BMW',
),
1 =>
array (
0 => 4,
1 => 'Ferrari',
),
)
请注意,以下输入将产生相同的结果:
$nums = ['puff' => 5, 'powder' => 4];
$cars = ['powder' => 'BMW', 'puff' => 'Ferrari'];
在如上所述使用array_map时,是顺序而不是键决定结果中的配对。
要使用foreach(请注意$ cars的顺序)通过键进行关联:
<?php
$nums = [0 => 5, 1 => 4];
$cars = [1 => 'Ferrari', 0 => 'BMW'];
foreach($nums as $k => $num)
$result[] = [$num, $cars[$k]];
var_export($result);
也可以得到所需的输出。