是否有可能在PHP中使用一個或多個數字並返回其總和的函數?一個函數可以帶一個未定義數量的參數嗎?
回答
您可以使用功能func_num_args和func_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
function sum($args) {
$total = 0;
foreach($args as $num) {
$total += $num;
}
return $total;
}
$args
是一個數組,它可以創建這樣的:
$args = array(3, 4, 5, 6);
這就是array_sum()的用途。 – 2010-05-03 13:54:05
我更喜歡使用「function sum(array $ args){}」,因爲它不需要檢查是否真的有數組。 – dbemerlin 2010-05-03 13:58:10
有關剛好路過陣列是什麼?
看看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()
作爲其他答案指出。
是。我們使用數組。 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";
?>
是。
<?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");
是的,這是
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);
希望這可以幫助!
非常酷的答案。 'function()use($ func){}'這是5.3中的新lambda? – 2010-05-03 14:24:29
功能的方法:
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);
}
在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;
}
- 1. 帶有未定義參數的JavaScript函數和參數在函數體中定義,是一個全局變量?
- 2. 我可以根據函數參數輕鬆定義一個變量嗎?
- 3. 指定一個函數(帶參數)一個變量名? [JavaScript]
- 4. 帶有未定義參數的函數
- 5. 我可以有一個C宏接受未定義數量的參數?
- 6. 定義一個函數作爲參數
- 7. R:可以使用帶有兩個參數的Map函數嗎?
- 8. 帶一個參數的PL/SQL函數
- 9. 傳遞一個帶參數的函數
- 10. 您可以將未定義的變量設置爲函數參數嗎?
- 11. 參數「的ApplicationController」不是一個函數,得到了未定義
- 12. 可以golang採取與未知數量的參數的函數作爲參數傳遞給另一個函數
- 13. 我可以將一個變量傳遞給一個函數嗎?
- 14. (How)我可以在Drupal中定義一個帶參數的塊嗎?
- 15. bash可以顯示一個函數的定義嗎?
- 16. 一個方法參數可以帶多個@StringDef嗎?
- 17. 帶有可變參數的函數作爲另一個函數的參數
- 18. 定義一個函數裏面的一個未定義的全局變量
- 19. 我可以在Ocaml的另一個「rec」函數中定義「rec」函數嗎?
- 20. 我可以調用一個函數作爲參數嗎?
- 21. 解構函數參數時可以創建一個對象嗎?
- 22. 我可以使用一個函數作爲參數嗎?
- 23. 參數'ContactsCtrl'不是一個函數,但未定義
- 24. 錯誤:[ng:areq]參數'xController'不是一個函數,但未定義
- 25. 錯誤:[ng:areq]參數'UserDataController'不是一個函數,但未定義
- 26. 如何定義一個布爾函數參數是可選的?
- 27. 不帶參數的自定義EL函數 - 可能嗎?
- 28. 我可以爲onclick事件定義一個Ruby函數嗎?
- 29. AWK咖喱函數 - 函數可以返回一個函數嗎?
- 30. 一個函數可以返回一個數組嗎?
[Accessing Undefined Arguments]的可能重複(http://stackoverflow.com/questions/1151053/accessing-undefined-arguments) – PhoneixS 2015-08-04 10:38:57