variadic functions — передать переменное число аргументов (и ключ, и значение) в переполнение стека

Как я могу передать переменное количество аргументов (и ключ и значения) в PHP

  <?php
function tryfun() {
echo "inside try()";
$args = func_get_args();
print_r($args);
}
tryfun(1,2);
tryfun(array("key"=>"value"));
?>

вывод это получить

        root@ip-:~# php trycmd.php
inside try()Array
(
[0] => 1
[1] => 2
)
inside try()Array
(
[0] => Array
(
[key] => value
)

)

что я хочу, чтобы это было

        root@ip:~# php trycmd.php
inside try()Array
(
[0] => 1
[1] => 2
)
inside try()Array
(
[key] => value
)

как я могу добиться этого в php
я использую Debian 7 wheezy
PHP 5.4

0

Решение

Вы не можете диктовать «имена» аргументов извне функции.

function ($foo, $bar) ...

Здесь первый позиционный аргумент будет назначен переменной $fooвторой $bar,

function () {
$args = func_get_args();
...
}

Здесь все позиционно переданные аргументы будут назначены массиву $args, Сами значения не имеют «имени», потому что «имена» не передаются.

Если вы передаете массив с парами ключ-значение, как вы это делаете, то ваш аргумент является массивом, который содержит пары ключ-значение. Сам массив по-прежнему воспроизводится в соответствии с вышеуказанными правилами.

Может быть, вы ищете extract(), или, может быть, то, что вы хотите, просто не так, как это работает.

0

Другие решения

Это может помочь вам: call_user_func_array

Создайте массив, в котором вы храните все параметры, и передайте этот массив в call_user_func_array. Должно работать нормально;)

0

Вы должны проверить, является ли ваш ввод массивом:

$args = func_get_args();
if(is_array($args) && count($args) == 1 && is_array($args[0]))
{
$args = $args[0];
}
print_r($args);

если вы хотите, вы можете проверить по другим шаблонам.

0

Вы можете сделать это:

function tryfun(){
$args = array();
$_args = func_get_args();
foreach( $_args as $a ){
if( is_array($a) ){
$args = array_merge( $args, $a );
}else{
$args[] = $a;
}
}
print_r($args);
}

tryfun(1,2);
Array
(
[0] => 1
[1] => 2
)

tryfun(array("key"=>"value"));
Array
(
[key] => value
)

tryfun(1,2,array("key"=>"value"));
Array
(
[0] => 1
[1] => 2
[key] => value
)
0
По вопросам рекламы [email protected]