2010-05-03 43 views

回答

18

您可以使用功能func_num_argsfunc_get_arg爲:

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 
0
function sum($args) { 
    $total = 0; 
    foreach($args as $num) { 
    $total += $num; 
    } 
    return $total; 
} 

$args是一個數組,它可以創建這樣的:

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

+0

這就是array_sum()的用途。 – 2010-05-03 13:54:05

+0

我更喜歡使用「function sum(array $ args){}」,因爲它不需要檢查是否真的有數組。 – dbemerlin 2010-05-03 13:58:10

3

有關剛好路過陣列是什麼?

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()作爲其他答案指出。

4

只需使用array_sum()

$sum = array_sum($arrayOfValues); 
+1

+1用於OOTB解決方案。 – Crozin 2010-05-03 13:57:22

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"); 
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); 

或作出currified可變參數映射器,包裝出來的它

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); 

希望這可以幫助!

+1

非常酷的答案。 'function()use($ func){}'這是5.3中的新lambda? – 2010-05-03 14:24:29

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); 
} 
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

相關問題