Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 设置多维数组_Php_Arrays_Recursion_Multidimensional Array - Fatal编程技术网

Php 设置多维数组

Php 设置多维数组,php,arrays,recursion,multidimensional-array,Php,Arrays,Recursion,Multidimensional Array,我需要按照客户机的模板将平面数组格式化为多维数组。 这是我的平面阵列: $client = array( 'LastName' => 'DUPOND', 'FirstName' => 'JEAN', 'Email' => 'jdupond@free.fr', 'Address1' => '126 QUAI BACALAN', 'ZipCode' =>

我需要按照客户机的模板将平面数组格式化为多维数组。 这是我的平面阵列:

$client = array(
    'LastName'        => 'DUPOND',
    'FirstName'       => 'JEAN',
    'Email'           => 'jdupond@free.fr',
    'Address1'        => '126 QUAI BACALAN',
    'ZipCode'         => '33160',
    'City'            => 'BORDEAUX',
    'Country'         => 'FR'
);
这是我客户的模板:

    $Template = array(
    'Header'       => array(
        'Context'      => array(
                'LastName'     => '',
                'FirstName'    => ''
        ),
        'Localization' => array(
            'ZipCode'      => '',
            'City'         => '',
            'Country'      => '',
        ),
        'Address1'     => '',
    ),
    'Options'      => array(
        'Email'        => '',
    ),
);
所以最后我需要一个数组,它看起来像:

$Template = array(
'Header'       => array(
    'Context'      => array(
            'LastName'     => 'DUPOND',
            'FirstName'    => 'JEAN'
    ),
    'Localization' => array(
        'ZipCode'      => '33160',
        'City'         => 'BORDEAUX',
        'Country'      => 'FR',
    ),
    'Address1'     => '126 QUAI BACALAN',
),
'Options'      => array(
    'Email'        => 'jdupond@free.fr',
));
但它必须与任何类型的模板一起工作。
即使明天客户决定更改模板结构,它也应该可以工作

因此,从一天到另一天,模板可能突然变成:

$Template = array(
'Header' => array(
    'LastName' => '',
    'FirstName' => '',
    'Localization' => array(
        'ZipCode' => '',
        'Deeper' => array(
            'EvenDeeper' => array(
                'Deepest' => array(
                    'City' => '',
                    'Country' => ''
                )
            )
        )
    )
),
'Options' => array(
    'Email' => '',
    'Address1' => ''
));
该功能仍将工作

function fillTemplate(&$template, $client) {
    foreach ($template as $key => &$value) {
        if (is_array($value)) {
            fillTemplate($value, $client);
        } elseif (isset($client[$key])) {
            $value = $client[$key];
        }
    }
}

$result = $Template; // Make copy of template
fillTemplate($result, $client);

这将递归地遍历模板。当它到达叶节点时,它将用$client中相应的值替换该值。它使用引用变量作为参数,并在foreach中使用,以便直接对模板进行更改。为了保留原始模板,我在调用fillTemplate之前复制了它。

有什么问题?只要用对原始数组的引用替换新数组赋值中的所有值就行了?我看不出,如果目标多维数组要更改,你怎么会有一些东西可以工作提示:如果结构可能更改,并且需要对任何深度的数组工作,请查看递归函数。我尝试过使用递归方法。我设法将每个键设置为正确的值,但我在返回最终数组时遇到了困难。即使明天客户端决定更改模板结构,它也应该可以工作。所以我只能专注于模板键。我不能更改模板。就像我说的,如果模板可以更改,这是不可能的。如果您的代码中没有模板键,那么模板键从何而来?很明显,除了模板键名称之外,所有内容都可以更改。但有时它将位于数组的第一维,而另一次位于第三维。除了模板键名称之外,还有什么其他内容?您能否发布一个模板的示例变体,其中显示你在说什么?