如何将可变数量的参数(包括键和值)传递给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 :(得分: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
)