PHP函数中的数组合并

PHP Array Merge in Function

我是新手,我试着直接问我的问题! 我的问题是基于函数中的数组合并。

我有这个代码:

GameFiles(array("gid" => "1", "sid" => "1", "expirecache" => "0"));
GameFiles(array("gid" => "1", "sid" => "1"));


    function GameFiles($params) {
          $default = array('skipcache' => false, 'expirecache' => 86400, 'os' => null);
          $params = array_merge($default, $params);


          var_dump($params);
    }

我得到这个输出:

array(5) {
["skipcache"]=>
bool(false)
["expirecache"]=>
string(1) "0"
["os"]=>
NULL
["gid"]=>
string(1) "1"
["sid"]=>
string(1) "1"
}
array(5) {
["skipcache"]=>
bool(false)
["expirecache"]=>
int(86400)
["os"]=>
NULL
["gid"]=>
string(1) "1"
["sid"]=>
string(1) "1"
}

问题是输出中的这 2 个数组。我想将所有数组合并到 1 中,因为如果您查看“键”,则 3 数组中的所有内容都相同。

如果您查看这 2 个发件人:

GameFiles(array("gid" => "1", "sid" => "1", "expirecache" => "0"));
GameFiles(array("gid" => "1", "sid" => "1"));

这将进入 GameFile($params),我设置了默认的其他数组,但我想将所有数组合并到一个数组中!

谢谢

此致

抱歉 - 我无法发表评论,但 David Kmenta 是正确的 - 你并不真的需要有一个功能。现有代码存在一个基本问题:任何时候调用 GameFiles,都会将 $default 数组与 $params 数组合并。你永远不会合并你试图合并的两个数组。

为了更清楚地说明这一点,下面是从函数中解包时发生的情况:

$default = array('skipcache' => false, 'expirecache' => 86400, 'os' => null);
$params1 = array("gid" => "1", "sid" => "1", "expirecache" => "0");
var_dump(array_merge($default, $params1));

$params2 = array("gid" => "1", "sid" => "1");
var_dump(array_merge($default, $params2));    

您只是打印出两个单独的数组。如果你有一个默认数组并需要合并它,你只需使用 array_merge() 两次,如

$default = array('skipcache' => false, 'expirecache' => 86400, 'os' => null);
$params1 = array_merge($default, array("gid" => "1", "sid" => "1", "expirecache" => "0"));
$result = array_merge($params1, array("gid" => "1", "sid" => "1"));
var_dump($result);

或者,甚至可能更多 sketchy/useless/overkill 如果你很懒惰并且不想不断地重新分配:

$default = function($arrOne, $arrTwo){
    return array_merge($arrOne, $arrTwo);
};
$param1 = array('skipcache' => false, 'expirecache' => 86400, 'os' => null);
$param2 = array("gid" => "1", "sid" => "1", "expirecache" => "0");
$param3 = array("gid" => "1", "sid" => "1");

var_dump($default($default($param, $param2), $param3));