函数中的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);

或者,如果你很懒,不想经常重新分配,甚至可能更粗略/无用/过度使用:

$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));