Php 根据另一个数组重新索引并填充数组

Php 根据另一个数组重新索引并填充数组,php,arrays,default-value,Php,Arrays,Default Value,我试图用两个数组中的信息创建一个表。以下是两个阵列: 第一个数组,用于表头 Array ( [0] => Color [1] => Length [2] => Waist ) 第二个数组,需要修改的数组 Array ( [0] => Array [0] => green [1] => Color [1] => Array [0] => 23 [1] => Length

我试图用两个数组中的信息创建一个表。以下是两个阵列:

第一个数组,用于表头

Array
(
    [0] => Color
    [1] => Length
    [2] => Waist
)
第二个数组,需要修改的数组

Array
(
    [0] => Array
        [0] => green [1] => Color

    [1] => Array
        [0] => 23 [1] => Length
)
Array
(
    [0] => 
)
Array
(
    [0] => Array
        [0] => 23 [1] => Length

    [1] => Array
        [0] => 24 [1] => Waist 
)       
阵列需要如下所示:

Array
(
    [0] => Array
        [0] => green [1] => Color

    [1] => Array
        [0] => 23 [1] => Length
    
    [2] => Array
        [0] => [1] => Waist 

Array
(
    [0] => Array
        [0] => [1] => Color

    [1] => Array
        [0] => [1] => Length

    [2] => Array
        [0] => [1] => Waist  

Array
(
    [0] => Array
        [0] => [1] => Color

    [1] => Array
        [0] => 23 [1] => Length

    [2] => Array
        [0] => 24 [1] => Waist 
因此,关键是第一级中的键需要与构成表头的数组中的键匹配,其中第二级中的[1]一个与表头具有相同的值。有什么想法吗


经过一些反馈后,另一种可接受的输出阵列结构是:

array(
    array(
        'Color' => 'green',
        'Length' => 23,
        'Waist' => null
    ),
    array(
        'Color' => null,
        'Length' => null,
        'Waist' => null
    ),
    array(
        'Color' => null,
        'Length' => 23,
        'Waist' => 24
    )
)

对于一组简单的数据,您有一个复杂的数组结构。您的最终阵列能否像这样工作得更好

$data = array(
    array(
        'Color' => 'green',
        'Length' => 23,
        'Waist' => NULL
    ),
    array(
        'Color' => NULL,
        'Length' => NULL,
        'Waist' => NULL
    ),
    array(
        'Color' => NULL,
        'Length' => 23,
        'Waist' => 24
    )
);
但是,如果你对自己的结构死心塌地,这应该是可行的:

function format_my_array($keys, $malformed) {
    foreach ($malformed as $key => $fragments) {
        $temp = array(
            'Color' => NULL,
            'Length' => NULL,
            'Waist' => NULL
        );
        foreach ($fragments as $fragment) {
            if (isset($fragment[1])) {
                switch($fragment[1]) {
                    case 'Length':
                        $temp['Length'] = $fragment[1];
                        break;
                    case 'Waist':
                        $temp['Waist'] = $fragment[1];
                        break;
                    default:
                        $temp['Color'] = $fragment[1];
                        break;
                }
            }
        }
        $malformed[$key] = array(
            array($temp['Color'], 'Color'),
            array($temp['Length'], 'Length'),
            array($temp['Waist'], 'Waist')
        );
    }
    return $malformed;
}

以可重用数组的形式生成默认值(一次),然后迭代输入数据并用每个项的“属性”集覆盖默认值

代码:()()


很难找出你的问题。您必须重新格式化数组吗?您能否更改生成它们的脚本以提供正确格式的数组?数字键的顺序是否重要?为什么不改为
Array([Color]=>green,[Length]=>23,[beight]=>24)
?这更符合逻辑。我评论而不是回答,因为它不能回答你的问题。你是对的,我将处理生成数组的脚本。我想我会让你知道,当我查看代码并添加了相关键时,我得到了比以前更干净的代码。由于我对php非常陌生,我完全忘记了键名是多么有用。所以,谢谢!
$headers = ['Color', 'Length', 'Waist'];

$data = [
    [
        ['green', 'Color'],
        ['23', 'Length'],
    ],
    [],
    [
        ['23', 'Length'],
        ['24', 'Waist'],
    ],
];

$defaults = array_fill_keys($headers, null);
var_export(
    array_map(
        function($item) use($defaults) {
            return array_replace($defaults, array_column($item, 0, 1));
        },
        $data
    )
);