首页 > 解决方案 > PHP如何组合数组并创建新数组

问题描述

我有 3 个这样的数组:

$first = array(
    [0] => 13
    [1] => 66
    [2] => 15
)

$second = array
(
    [0] => append
    [1] => prepend
    [2] => append
)

$third = array
(
    [0] => 2
    [1] => 4
    [2] => 1
)

现在我想组合这 3 个数组并像这样创建新的SINGLE数组:我想从每个数组中获取值并将其组合成一个。

$new_array = array(

    [0] = array (
        'page'=>13,
        'position'=>'append'
        'priority'=>'2'
    )
    [1] = array (
        'page'=>66,
        'position'=>'prepend'
        'priority'=>'4'
    )
    [2] = array (
        'page'=>15,
        'position'=>'append'
        'priority'=>'1'
    )
)

这该怎么做 ?

标签: phparraysmultidimensional-arrayarray-merge

解决方案


您可以使用array_map()遍历多个数组(长度相同)并从它们中逐项构建一个新数组:

$first = array(13, 66, 15);
$second = array('append', 'prepend', 'append');
$third = array(2, 4, 1);

print_r(
    array_map(
        function($page, $position, $priority) {
            return compact('page', 'position', 'priority');
        },
        $first,
        $second, 
        $third
    )
);

尽管在这种情况下,结构简单的 foreach() 可能是另一种选择。

编辑:版本 2。有些人可能会认为这更糟,因为可读性和代码可维护性。感谢 AbraCadaver

$keys = ['page', 'position', 'priority'];

// Note: The order in $keys and array_map() arguments must be the same
// On the other hand you only need to type the keys once and it's easy
// to change the number of arguments :)

print_r(
    array_map(
        function(...$args) use ($keys) {
            return array_combine($keys, $args);
        },
        $first,
        $second, 
        $third
    )
);

编辑:版本 3。使用更现代的 PHP (7.4) 和箭头函数:

print_r(
    array_map(
        fn(...$args) => array_combine($keys, $args),
        $first,
        $second, 
        $third
    )
);

推荐阅读