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