Возможно ли иметь функцию в 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
function sum($args) {
$total = 0;
foreach($args as $num) {
$total += $num;
}
return $total;
}
$args
является массив, который вы можете создать так:
$args = array(3, 4, 5, 6);
Для этого используется array_sum(). –
Я предпочитаю использовать «function sum (array $ args) {}», поскольку он устраняет необходимость проверки, действительно ли у вас массив. – dbemerlin
, что о проездом массив?
Посмотрите на 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? –
Функциональный способ:
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;
}
Или упрощена с помощью Еогеасп:
function sum(...$nums) {
$sum=0;
foreach($nums as $num) {
$sum += $num;
}
return $sum;
}
Источник : PHP Manual: Function arguments
- 1. Максимальное количество аргументов postgresql функция может принимать
- 2. Получить общее количество аргументов, функция может принимать
- 3. Есть ли способ разрешить функции принимать неопределенное количество аргументов?
- 4. Функция, которая может принимать разные типы аргументов
- 5. Неопределенное количество аргументов в C++
- 6. Может ли XmlBuilder.processing принимать больше аргументов?
- 7. Неопределенное количество аргументов полезной нагрузки - RESTful
- 8. Могут ли быть функции python, которые принимают неопределенное количество аргументов?
- 9. передать неопределенное количество аргументов функции VBA
- 10. Может ли язык принимать бесконечное количество
- 11. Dart, как сделать функцию, которая может принимать любое количество аргументов
- 12. Как передать неопределенное количество аргументов базовому конструктору?
- 13. Может ли глобальная функция принимать аргумент блока?
- 14. Может ли переменная количество аргументов передаваться функции?
- 15. Как передать неопределенное количество аргументов в лямбда? (в Python)
- 16. Шаги прогресса для задач, которые могут принимать неопределенное количество времени?
- 17. Может ли Flask-Restful принимать имена аргументов без учета регистра?
- 18. Принимая неопределенное количество аргументов в Ruby/Inline C
- 19. Можете ли вы написать функцию декоратора C#, которая может принимать любое количество аргументов?
- 20. Golang MySQL запрашивает неопределенное количество аргументов с использованием оператора IN
- 21. Принимать произвольное количество аргументов в пользовательской функции скриптов Google?
- 22. Максимальное количество цифр внутри сканера может принимать
- 23. Передача переменной Количество аргументов
- 24. Функция Python как переменная - разное количество аргументов
- 25. Python Class - Как создать класс, который принимает неопределенное количество аргументов?
- 26. Может ли функция принимать итератор и reverse_iterator как параметр
- 27. Может ли функция MATLAB ode45 принимать векторные массивы?
- 28. Может ли функция getSymbols() принимать переменную вместо самого тикера?
- 29. Может ли функция SQL SUM() принимать выражение в качестве аргумента?
- 30. Может ли QAction принимать капли?
Возможный дубликат [Доступ к неопределенным аргументам] (http://stackoverflow.com/questions/1151053/accessing-undefined-arguments) – PhoneixS