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));
我是新手,我试着直接问我的问题! 我的问题是基于函数中的数组合并。
我有这个代码:
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));