Почему бы просто не использовать функцию func_get_args
?
function yourFunction($keys) {
$default_options = array('test', array('test1' => array('test2')), 'test3');
$options = func_get_args();
array_shift($options);
$options = array_combine($keys, $options);
$options = array_merge($default_options, $options);
print_r($options);
}
// Usage
yourFunction(array('option1', 'option2', 'option3', 'option4'), 'optionval1', array('optionval2-1', 'optionval2-2'), 'optionval3', 4);
Таким образом, у вас есть массив для начала, и вам не нужно ни о чем беспокоиться, и он может принимать любое количество параметров / аргументов!
EDIT:
(Второе редактирование, в качестве первого параметра добавлены ключи $)
Модифицированная функция выше, вот выход. Не уверен, какой именно формат вывода вы ищете. Таким образом, вам может понадобиться опубликовать конечную структуру массива, которую вы ищете, для ваших начальных данных.
Array
(
[0] => test
[1] => Array
(
[test1] => Array
(
[0] => test2
)
)
[2] => test3
[option1] => optionval1
[option2] => Array
(
[0] => optionval2-1
[1] => optionval2-2
)
[option3] => optionval3
[option4] => 4
)