使用平面映射数组将另一个平面数组转换为二维数组

问题描述 投票:0回答:4

我有2个数组

$arr1 = Array
    (
        [REG1] => 94
        [REG3] => 45
    )

$arr2 =Array
    (
        [0] => REG1
        [1] => REG2
        [2] => REG3
        [3] => REG4
    )

我必须循环 2 个数组,并且我希望在一个数组中得到如下结果:

Array(
    [0] => Array(
            [REG1] => 94
        )
    [1] => Array(
            [REG2] =>
        )
    [2] => Array(
            [REG3] => 45
        )
    [3] => Array(
            [REG4] => 
        )
)

但目前我还不能做我想做的事,这就是我现在的处境:

private function mergeData($arr1, $arr2){

    $result = array_map(function($v1, $v2){
        $t[$v1] = $v2;
        return $t;
    }, $arr2, $arr1);
                
    return $result;
}

输出:

Array(
    [0] => Array(
           [REG1] => 94
        )
    [1] => Array(
            [REG2] =>45
        )
    [2] => Array(
            [REG3] => 
        )
    [3] => Array(
            [REG4] => 
        )
)

我无法使用正确的键正确放置第一个数组的值。 我尝试过

array_merge_recursive()
,但也失败了。

php arrays multidimensional-array mapping
4个回答
2
投票

$arr3 = array_fill_keys( $arr2, '' );

创建一个包含

$arr2
值的数组,其中 keysvalue 为空字符串。

$arr3 =Array
    (
        [REG1] => '' 
        [REG2] => ''
        [REG3] => ''
        [REG4] => ''
    )

之后合并即可。

$result = array_merge ( $arr3, $arr1 );


0
投票

另一种选择是使用

array_map
函数和映射键以及相应的值(如果有):

$arr1 = [
    'REG1' => 94,
    'REG3' => 45
];

$arr2 = [
    'REG1',
    'REG2',
    'REG3',
    'REG4'
];

$result = array_map(function($item) use($arr1){
    return [$item => isset($arr1[$item]) ? $arr1[$item] : ""];
},$arr2);

这将返回:

Array
(
    [0] => Array
        (
            [REG1] => 94
        )

    [1] => Array
        (
            [REG2] => 
        )

    [2] => Array
        (
            [REG3] => 45
        )

    [3] => Array
        (
            [REG4] => 
        )

)

0
投票

使用循环:

<?php

$arr1 = [
    'REG1' => 94,
    'REG3' => 45
];

$arr2 = [
    'REG1',
    'REG2',
    'REG3',
    'REG4'
];

$result = $arr2;
foreach($result as &$v)
    $v = [$v => $arr1[$v] ?? null];
unset($v);

var_export($result);

输出:

array (
  0 => 
  array (
    'REG1' => 94,
  ),
  1 => 
  array (
    'REG2' => NULL,
  ),
  2 => 
  array (
    'REG3' => 45,
  ),
  3 => 
  array (
    'REG4' => NULL,
  ),
)

0
投票

要享受 PHP 的所有现代便利,请使用

array_map()
、简洁的箭头函数语法和空合并运算符编写函数式脚本。 演示

var_export(
    array_map(
        fn($v) => [$v => $arr1[$v] ?? ''],
        $arr2
    )
);
© www.soinside.com 2019 - 2024. All rights reserved.