Действительно ли возможно иметь функцию в PHP, который берет 1 или более чисел и возвращает их сумму?
Вы можете использовать функции 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
Посмотрите на 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()
, как было указано в других ответах.
просто используйте array_sum():
$sum = array_sum($arrayOfValues);
Да. Для этого мы используем массивы. 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);
или сделать из нее карризованный преобразователь-обертку varargs
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 sum($args) {
$total = 0;
foreach($args as $num) {
$total += $num;
}
return $total;
}
$ args
- это массив, который можно создать следующим образом:
$ args = array (3, 4, 5, 6) ;
Функциональный способ:
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);
}