在PHP中传递可变数量的参数(键和值)

时间:2014-11-27 13:34:46

标签: php 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

4 个答案:

答案 0 :(得分:0)

这可能会对您有所帮助:call_user_func_array

创建一个存储所有参数的数组,并将此数组提供给call_user_func_array。它应该工作正常;)

答案 1 :(得分:0)

您必须检查输入是否为数组:

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

如果你想要,你可以检查其他模式。

答案 2 :(得分:0)

你无法从函数外部指定参数的“名称”。

function ($foo, $bar) ...

此处第一个位置参数将分配给变量$foo,第二个位于$bar

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

此处所有位置传递的参数都将分配给数组$args。值本身没有“名称”,因为“名称”不会传递。

如果你传递一个带键值对的数组,那么你的参数就是一个包含键值对的数组。阵列本身仍然按照上述规则进行播放。

也许你正在寻找extract(),或者你想要的只是它的工作原理。

答案 3 :(得分: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
)