我有情况我想在php函数中传递变量。 参数的数量是无限的。我必须在不使用数组的情况下传递函数。 就像正常方法一样。逗号分开。
赞test(argum1,argum2,argum3.....,..,,.,.,.....);
我怎么称呼这个功能?假设我有一个包含5个参数的数组数组(1,2,3,4,5)。我想调用像func(1,2,3,4,5)这样的函数。但问题是,在调用函数时,我将如何运行参数循环。我试过func(implode(',',array));但它将所有返回字符串作为一个参数
在定义中,我也想要相同的格式。
我可以通过数组传递可变数量的参数,但我必须以逗号分隔。
我必须将逗号分开。但是在传递时我不知道参数的数量,它们在数组中。
答案 0 :(得分:4)
在主叫方,使用call_user_func_array
在函数内部,使用func_get_args
。
由于这种方式你只是将一个数组转换为一个数组的参数,我怀疑它的智慧。如果您在调用 或 接收时参数 ,则任一功能都可以。如果两端都是动态的,为什么不直接传递数组?!
答案 1 :(得分:2)
您可以将您的功能定义为
function test ()
然后在php中使用func_get_args
函数。
然后您可以将参数作为数组处理。
实施例
function reverseConcat(){
return implode (" ", array_reverse(func_get_args()));
}
echo reverseConcat("World", "Hello"); // echos Hello World
如果你真的想要处理它们,就像它们在命名参数中那样你可以做这样的事情。
function getDistance(){
$params = array("x1", "y1", "x2", "y2");
$args = func_get_args();
// trim excess params
if (count($args) > count($params) {
$args = array_slice(0, count($params));
} elseif (count($args) < count($params)){
// define missing parameters as empty string
$args = array_pad($args, count($params), "");
}
extract (array_combine($params, $args));
return sqrt(pow(abs($x1-$x2),2) + pow(abs($y1-$y2),2));
}
答案 2 :(得分:2)
你可以使用:
$function_args = func_get_args();
在test()函数定义中。
答案 3 :(得分:0)
使用此功能:
function test() {
$args = func_get_args();
foreach ($args as $arg) {
echo "Arg: $arg\n";
}
}
答案 4 :(得分:0)
我不确定你用“相同的格式”是什么意思。你的意思是同一种类型,就像它们都必须是一个字符串一样?或者你的意思是他们需要满足一些标准,例如,如果它是一个电话号码列表,他们需要(ddd) ddd-dddd
?
如果是后者,那么预先定义的参数就会遇到麻烦,所以我假设你的意思是希望它们都是同一类型。
因此,基于已经建议的使用func_get_args()
的解决方案,我还会应用array_filter()
来确保类型:
function set_names() {
function string_only($arg) {
return(is_string($arg));
}
$names_provided = func_get_args();
// Now you have an array of the args provided
$names_provided_clean = array_filter($names_provided, "string_only");
// This pulls out any non-string args
$names = array_values($names_provided_clean);
// Because array_filter doesn't reindex, this will reset numbering for array.
foreach($names as $name) {
echo $name;
echo PHP_EOL;
}
}
set_names("Joe", "Bill", 45, array(1,2,3), "Jane");
请注意,我没有进行任何更深入的健全性检查,因此如果没有传入任何值,可能会出现问题等。
答案 5 :(得分:-2)
您也可以使用explode http://www.php.net/manual/en/function.explode.php来使用数组。
$separator = ",";
$prepareArray = explode ( $separator , '$argum1,$argum2,$argum3');
但请注意, $ argum1,$ argum2,等不应包含值。您可以通过添加任何分隔符来克服此问题 $ separator =“VeryUniqueSeparator”; 我没有代码所以不能确切的代码。但是操纵它可以满足您的要求。