我在使用可变数量的数组值作为函数的参数时遇到问题。 由于PHP具有函数" func_num_args()" (函数参数的数量)和" func_get_args()" (保存数组中的参数)可变参数量,将数组的值用作参数会很棒。
像添加所有整数值的函数一样:
function add()
{
$amount = func_num_args();
$param = func_get_args();
$sum = 0;
for ($i=0; $i < $amount; $i++)
{
$sum = $sum + $param[$i];
}
echo "$sum";
}
现在我将使用应添加的值定义数组并运行函数:
$values = array(1,2,3,4,5,6,7,24,2345,6323,765,234);
add($values);
但是当我运行如图所示的函数时,我得到一个错误,因为只发送了数组$ values的第一个值,而不是所有的值。
如何确保所有值都作为参数提供?
如果我按如下方式运行该功能,则可以正常工作。但是我需要知道需要传递给函数的精确参数数量。这里只有12,但如果用户输入450个参数......
,该怎么办add(1,2,3,4,5,6,7,24,2345,6323,765,234)
add($values[0],$values[1], ...)
使用&#34;全球$值&#34;时还有另一种解决方案在函数中,变量在函数内部可用。但是这个解决方案并不好,并且存在问题。
当使用全局变量再次运行相同的函数时,我需要更改函数,设置为新的参数集(如$ values2)。
同样,&#34;可变数量的参数的功能&#34; (func_num_args()和func_get_args())如果你不能通过数组将可变数量的参数传递给函数,那将是无用的。
帮助将不胜感激。问候
答案 0 :(得分:2)
您混淆变量参数并使用值数组作为参数。在您发布的示例中,$param
不等于
array(1,2,3,4,5,6,7,24,2345,6323,765,234)
等于
array(array(1,2,3,4,5,6,7,24,2345,6323,765,234))
即你正在致电
sum(array(1,2,3,4,5,6,7,24,2345,6323,765,234));
如果你想打电话
sum(1,2,3,4,5,6,7,24,2345,6323,765,234);
然后您可以使用call_user_func_array
:
call_user_func_array('sum', $values);
答案 1 :(得分:0)
如果您不想使用func_num_args()
和func_get_args()
,请尝试以下操作:
<?php
function add($values)
{
$sum=0;
for ($i=0; $i < count($values); $i++)
{
$sum = $sum + $values[$i];
}
return $sum;
}
$values = array(1,2,3,4,5,6,7,24,2345,6323,765,234);
echo add($values);
?>
答案 2 :(得分:0)
您将传递数组作为(单个)参数,并将多个参数作为数组 in 函数访问。 p>
foo(1, 2, 3); // three parameters
// vs
foo({1, 2, 3}); // one array as parameter, containing three values
您的功能需要在}
移除后放置$sum = 0;
并放置在最后,然后才能正常工作:
function add() {
$amount = func_num_args();
$param = func_get_args();
$sum = 0;
for ($i=0; $i < $amount; $i++) {
$sum = $sum + $param[$i];
}
return $sum; // functions in general should not “echo out” results,
// but rather return them
}
echo add(1,2,3); // results in 6