php如何使用数组中的值作为函数参数

时间:2014-11-15 12:44:17

标签: php arrays

我在使用可变数量的数组值作为函数的参数时遇到问题。 由于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())如果你不能通过数组将可变数量的参数传递给函数,那将是无用的。

帮助将不胜感激。问候

3 个答案:

答案 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