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

时间:2010-11-29 22:42:26

标签: php arrays

我正在尝试使用来自两个数组的信息创建表。以下是两个数组:

第一个数组,用于表头

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]第二级中的键与表头具有相同的值。有任何想法吗?

3 个答案:

答案 0 :(得分:2)

您有一个复杂的数组结构,可以轻松设置一组数据。你的最终阵列可以更好地工作吗?

$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;
}

答案 1 :(得分:0)

php有一个带阵列功能的gigangtig库,看看它们你肯定会找到你需要的东西我建议从 array_merge array_merge_recursive array_combine

答案 2 :(得分:0)

将默认值(一次)生成为可重复使用的数组,然后迭代您的输入数据,并使用每个项目的“属性”集覆盖默认值。

代码:(Demo)(PHP7.4+ Demo

$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
    )
);
相关问题