合并包含文件中的数组

时间:2013-03-11 08:02:30

标签: php

我有2个PHP文件,config.php和confignw.php如下,

的config.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"
);

confignw.php

$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]已更改。但正在发生的事情是,只有第二个文件的值才会出现。那么如何实现这一预期结果呢?欢迎任何想法或建议......

2 个答案:

答案 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