PHP:将几个数组合并为关联数组

时间:2017-08-23 07:57:18

标签: php arrays

我有这个数组:

$main = array("Name","Age");

$fname =array("Peter","Ben","Joe");

$age = array("35","37","43");

我需要结合它。输出数组必须是:

[0] =>
   [Name] => [Peter]
   [Age] => [35]
[1] =>
   [Name] => [Ben]
   [Age] => [37]
[2] =>
   [Name] => [Joe]
   [Age] => [43]

等等。我试过了array_combine,但是它给出了一个错误,因为$main只包含两个值,array_merge组合数组并不是我想要的,它将任何下一个数组添加到结果数组的末尾。

如何解决我的问题?求救!

3 个答案:

答案 0 :(得分:7)

这样的事情应该做:

$result = array_map(
    function () use ($main) {
        return array_combine($main, func_get_args());
    },
    $fname,
    $age
);

PHP 5.6+为回调提供了更好的语法:

function (...$vals) use ($main) {
    return array_combine($main, $vals);
}

虽然我首先要指出这是一个相当奇特的数据集,但你应该看看是否有什么可以之前来获取你的数据更好的形状,所以你不需要像这样向后弯腰。

答案 1 :(得分:1)

使用array_maparray_combine函数的解决方案:

$result = array_map(function($v) use($main){ 
    return array_combine($main, $v);
}, array_map(null, $fname, $age));

print_r($result);

使用常规foreach循环+ array_combine函数可以实现同样的效果:

$result = [];
foreach ($fname as $k => $v) {
    $result[] = array_combine($main, [$v, $age[$k]]);
}

输出:

Array
(
    [0] => Array
        (
            [Name] => Peter
            [Age] => 35
        )

    [1] => Array
        (
            [Name] => Ben
            [Age] => 37
        )

    [2] => Array
        (
            [Name] => Joe
            [Age] => 43
        )
)

答案 2 :(得分:0)

这就是你想要的:

$newArray = [];
$main = array("Name","Age");

$fname =array("Peter","Ben","Joe");

$age = array("35","37","43");
$newArray = array_combine($fname, $age);
$array = [];
foreach($newArray as $key => $value) {
  $array[] = [
      $main[0] => $key,
      $main[1] => $value
  ];
}
var_dump($array);