PHP Array Merge в функции

0

Я новичок здесь, и я пытаюсь задать свой вопрос напрямую! Моя проблема связана с функцией объединения массива.

У меня есть этот код:

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), и я задаю другой массив по умолчанию, но я хочу объединить весь массив в один массив!

благодаря

С уважением

  • 2
    array_merge(array("gid" => "1", "sid" => "1", "expirecache" => "0"), array("gid" => "1", "sid" => "1"), array('skipcache' => false, 'expirecache' => 86400, 'os' => null)); Вам не нужно объявлять дополнительную функцию.
Теги:
arrays
array-merge

1 ответ

0
Лучший ответ

Извините - я не могу комментировать, но Дэвид Кемта прав - вам действительно не нужно иметь функцию. Существует одна основная проблема с вашим существующим кодом: каждый раз, когда вы вызываете 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)); 

Ещё вопросы

Сообщество Overcoder
Наверх
Меню