首页 > 解决方案 > 嵌套数组,用数字替换字母键并保持结构

问题描述

我有一个嵌套数组,深度为 4 层。

我想用数字而不是元级别替换键,这个数组应该保留字母键。

该数组将有很多值,并且会有更多像 Marco Mueller 这样的帐户,这只是一个简短的示例。重要的是,它在被数字键替换后将保持相同的嵌套结构。

$array = array (
    'Marco Mueller' =>
        array (
            'meta' =>
                array (
                    'accountName' => 'Marco Mueller',
                    'accountId' => '1',
                    'sum' => '3,659.06',
                ),
            'Conrad, Ute' =>
                array (
                    'meta' =>
                        array (
                            'customerName' => 'Conrad, Ute',
                            'customerId' => '8391',
                            'sum' => '457.59',
                        ),
                    'Fidor Bank' =>
                        array (
                            'meta' =>
                                array (
                                    'bankName' => 'Fidor Bank',
                                    'bankKey' => 'FID',
                                    'sum' => '457.59',
                                ),
                            'H1-2019' =>
                                array (
                                    'meta' =>
                                        array (
                                            'periodName' => 'H1-2019',
                                            'periodId' => '5',
                                            'sum' => '457.59',
                                        ),
                                ),
                        ),
                ),
        ),
);

结果应该是

$array = array (
        array (
            'meta' =>
                array (
                    'accountName' => 'Marco Mueller',
                    'accountId' => '1',
                    'sum' => '3,659.06',
                ),
             'items' => array (
                    'meta' =>
                        array (
                            'customerName' => 'Conrad, Ute',
                            'customerId' => '8391',
                            'sum' => '457.59',
                        ),
                     'items' => 
                           array (
                               'meta' =>
                                   array (
                                    'bankName' => 'Fidor Bank',
                                    'bankKey' => 'FID',
                                    'sum' => '457.59',
                                   ),
                                'items' => array (
                                    'meta' =>
                                        array (
                                            'periodName' => 'H1-2019',
                                            'periodId' => '5',
                                            'sum' => '457.59',
                                        ),
                                ),
                            ),

                            array (
                                    'meta' =>
                                        array (
                                            'periodName' => 'H2-2019',
                                            'periodId' => '6',
                                            'sum' => '600',
                                        ),
                                ),
                           ),
                ),
        ),
);

标签: phpmultidimensional-arraykeystructure

解决方案


我用这个功能解决了我的问题,如果有人知道如何使它更优雅和高效,欢迎您!

private function getValues(array $array)
    {
        $newArray = [];
        foreach ($array as $item) {
            $meta = $item['meta'];
            unset($item['meta']);

            $arrayValues = array_values($item);

            if (count($arrayValues) > 1 || count($arrayValues[0]) > 1) {
                $arrayValues = $this->getValues($arrayValues);
            }

            if (!$arrayValues) {
                $values = [
                    'meta' => $meta,
                ];
            } else {
                $values = [
                    'meta' => $meta,
                    'items' => $arrayValues,
                ];
            }

            $newArray[] = $values;


        }

        return $newArray;
    }

推荐阅读