函数可以采用未定义数量的参数吗?

时间:2010-05-03 13:49:04

标签: php

是否可以在PHP中使用一个函数,该函数需要一个或多个数字并返回它们的总和?

10 个答案:

答案 0 :(得分:18)

您可以将[{3}}和func_num_args功能用作:

function sum() {
        for($i=0,$sum=0;$i<func_num_args();$i++) {
                $sum += func_get_arg($i);
        }
        return $sum;
}

并将该函数调用为:

echo sum(1);       // prints 1
echo sum(1,2);     // prints 3
echo sum(1,2,3);   // prints 6

答案 1 :(得分:6)

是的,它是

function sum() {
    $args = func_get_args();
    return array_sum($args);
}

echo sum(1, 2, 3, 4);

您还可以进一步抽象这个概念,以便能够包装任何数组函数

function mapargs() {
    $args = func_get_args();
    return call_user_func(array_shift($args), $args);
}

echo mapargs('array_sum', 1, 2, 3, 4);

或者制作一个经过整理的varargs mapper-wrapper

function mapify($func) {
    return function() use($func) {
        $a = func_get_args();
        return call_user_func($func, $a);
    };
}

$sum = mapify('array_sum');
echo $sum(1, 2, 3, 4);

希望这有帮助!

答案 2 :(得分:5)

看看func_get_args( ). 它返回一个包含传递给函数的所有参数的数组,基本上就是你想要的。

您可以使用func_num_args( )直接接收参数的数量。

但请注意,在大多数情况下,将数组传递给函数会更好。上述函数被认为是特殊情况,它们更容易和/或更易读,不能直接创建数据并将数据传递给函数。

这个琐碎,相当不切实际的例子显示了这些优点:

// By passing an array to the function
function add1( $nums )
{
 $res = 0;
 foreach( $nums as $n )
 {
        $res += $n;
 }
 return $res;
}
add1( array( 1, 2, 3, 4 ) );

// Using func_get_args()
function add2( )
{
 $res = 0;
 foreach( func_get_args() as $n )
 {
        $res += $n;
 }
 return $res;
}
add2( 1, 2, 3, 4 );

add2()显然更容易使用,在这种情况下对它的调用更具可读性。

上面的解决方案一般是关于如何使函数获取任意数量的参数。如果您的问题实际上只是添加一些数字,请使用array_add()作为其他答案指出。

答案 3 :(得分:4)

只需使用array_sum()

$sum = array_sum($arrayOfValues);

答案 4 :(得分:3)

只是传递数组呢?

答案 5 :(得分:3)

是。我们使用数组。 http://php.net/manual/en/language.types.array.php

而且php也有一个array_sum函数: http://php.net/manual/en/function.array-sum.php

<?php
$a = array(2, 4, 6, 8);
echo "sum(a) = " . array_sum($a) . "\n";
?>

答案 6 :(得分:3)

在PHP 5.6及更高版本中,您将能够这样做:

function sum(...$nums) {
  for($i=0,$sum=0;$i<count($nums);$i++) {
    $sum += $nums[$i];
  }
  return $sum;
}

或者,简化使用foreach:

function sum(...$nums) {
  $sum=0;
  foreach($nums as $num) {
    $sum += $num;
  }
  return $sum;
}

来源:PHP Manual: Function arguments

答案 7 :(得分:2)

<?php
function sum(){
  $args = func_get_args();
  $sum = 0;
  foreach($args as $arg){
    if(is_numeric($arg)){
      $sum += $arg;
    }
  }
  return $sum;
}

echo sum().'<br/>
'.sum(1,2,3,"4", "5.63");

答案 8 :(得分:0)

function sum($args) {
  $total = 0;
  foreach($args as $num) {
    $total += $num;
  }
  return $total;
}

$args是一个数组,你可以这样创建:

$args = array(3, 4, 5, 6);

答案 9 :(得分:0)

功能方式:

function fold($step, $acc, $nums) {
  $val = array_pop($nums);
  if (isset($val)) {
    $acc = call_user_func($step, $val, $acc);
    return fold($step, $acc, $nums);
  } else {
    return $acc;
  }
}

function add($a, $b) {
  return $a + $b;
}

function sum($args) {
  return fold('add',0,$args);
}