我有2个PHP文件,config.php和confignw.php如下,
$html = array(
[update_item_in_store] => Array
(
[header] => default_header.php
[body] => update_item_in_store.php
[footer] => default_footer.php
)
[user_followed] => Array
(
[header] => default_header.php
[body] => user_followed.php
[footer] => default_footer.php
)
[updated_account_settings] => Array
(
[header] => default_header.php
[body] => updated_account_settings.php
[footer] => default_footer.php
)
);
$cml = array
(
"default_header",
"default_body",
"default_footer"
);
$html = array(
[add_item_in_store] => Array
(
[header] => default_header.php
[body] => add_item_in_store.php
[footer] => default_footer.php
)
[user_followed] => Array
(
[header] => default_header.php
[body] => user_followed_new.php
[footer] => default_footer.php
)
);
$cml = array
(
"default_skeleton"
);
这两个文件都包含在名为common.php的文件中,
结果应该是两者合并如下,
$html = array(
[update_item_in_store] => Array
(
[header] => default_header.php
[body] => update_item_in_store.php
[footer] => default_footer.php
)
[user_followed] => Array
(
[header] => default_header.php
[body] => user_followed_new.php
[footer] => default_footer.php
)
[updated_account_settings] => Array
(
[header] => default_header.php
[body] => updated_account_settings.php
[footer] => default_footer.php
)
[add_item_in_store] => Array
(
[header] => default_header.php
[body] => add_item_in_store.php
[footer] => default_footer.php
)
);
$cml = array
(
"default_header",
"default_body",
"default_footer",
"default_skeleton"
);
查看文件confignw.php
中数组的两个数组中添加的值,并注意$ html [user_followed] [body]已更改。但正在发生的事情是,只有第二个文件的值才会出现。那么如何实现这一预期结果呢?欢迎任何想法或建议......
答案 0 :(得分:3)
PHP不会神奇地合并数组。它遇到同一个变量的两个赋值。在config.php
中,您将一些数据分配给$html
变量。包含文件时,数据将分配给变量。然后,当包含confignw.php
时,PHP会为同一个$html
变量分配另一个数据。没有合并,因为不应该有任何合并。
$a = array('a');
$a = array('b');
print_r($a); // prints array('b');
此代码演示了您正在做的事情。如果要合并数组,则需要告诉PHP它。例如,在confignw.php
中你可以写:
if (!isset($html)) {
$html = array();
}
$html = array_merge($html, array(
'add_item_in_store' => Array
(
'header' => 'default_header.php',
'body' => 'add_item_in_store.php',
'footer' => 'default_footer.php'
),
'user_followed' => Array
(
'header' => 'default_header.php',
'body' => 'user_followed_new.php',
'footer' => 'default_footer.php'
)
));
如果上述代码没有达到您想要的效果,请查看array_merge_recursive函数。
答案 1 :(得分:1)
因为你包含了具有相同名称的变量的代码,我想后者将"覆盖"第一个。有点像把纸张放在另一张纸上 - 你只会看到一张纸在上面。
如果要合并这些数组,则需要将它们分配给不同名称的变量,然后使用array_merge_recursive,如DCoder建议的那样。您也可以查看array_replace_recursive函数 - 它应该可以正常工作。查看this