Czy jest możliwe posiadanie funkcji w PHP, która pobiera 1 lub więcej liczb i zwraca ich sumę?Czy funkcja może przyjmować niezdefiniowaną liczbę argumentów?
Odpowiedz
Można skorzystać z funkcji func_num_args i func_get_arg jak:
function sum() {
for($i=0,$sum=0;$i<func_num_args();$i++) {
$sum += func_get_arg($i);
}
return $sum;
}
i wywołać funkcję jak:
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
jest tablicą, która może stworzyć tak:
$args = array(3, 4, 5, 6);
Do tego służy funkcja array_sum(). –
Wolę używać "function sum (array $ args) {}", ponieważ eliminuje to konieczność sprawdzenia, czy naprawdę masz tablicę. – dbemerlin
co o tylko przejazdem tablicę?
Proszę spojrzeć na func_get_args(). Zwraca tablicę zawierającą wszystkie argumenty przekazane do funkcji, w zasadzie dokładnie to, co chcesz.
Możesz użyć func_num_args(), aby bezpośrednio otrzymać liczbę argumentów.
Należy jednak pamiętać, że w większości przypadków lepiej jest po prostu przekazać tablicę do funkcji. Powyższe funkcje są uważane za specjalne przypadki, w których łatwiej i/lub bardziej czytelnie nie można tworzyć i przekazywać tablic bezpośrednio do funkcji.
to trywialne, raczej nierealne, przykład pokazuje zalety:
// 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()
wyraźnie łatwiejszy w obsłudze i rozmowy do niej bardziej czytelna w tym przypadku.
Powyższe rozwiązanie jest ogólnym sposobem uzyskania dowolnej liczby argumentów. Jeśli twój problem polega tylko na dodaniu liczb, użyj array_add()
, jak wskazano w innych odpowiedziach.
Tak. Używamy do tego tablic. http://php.net/manual/en/language.types.array.php
A także PHP posiada funkcję array_sum też: http://php.net/manual/en/function.array-sum.php
<?php
$a = array(2, 4, 6, 8);
echo "sum(a) = " . array_sum($a) . "\n";
?>
Tak.
<?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");
Tak, to jest
function sum() {
$args = func_get_args();
return array_sum($args);
}
echo sum(1, 2, 3, 4);
Można również dodatkowo abstrakcyjne pojęcie móc owinąć każdą funkcję tablicową
function mapargs() {
$args = func_get_args();
return call_user_func(array_shift($args), $args);
}
echo mapargs('array_sum', 1, 2, 3, 4);
lub dokonać currified varargs odwzorowujący-wrapper z to
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);
mam nadzieję że to pomoże!
Bardzo fajna odpowiedź. 'function() use ($ func) {}' Czy to nowa właściwość lambda w wersji 5.3? –
sposób funkcjonalny:
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);
}
W PHP 5.6, a później będzie można to zrobić w ten sposób:
function sum(...$nums) {
for($i=0,$sum=0;$i<count($nums);$i++) {
$sum += $nums[$i];
}
return $sum;
}
Albo uprościć używając foreach:
function sum(...$nums) {
$sum=0;
foreach($nums as $num) {
$sum += $num;
}
return $sum;
}
Źródło : PHP Manual: Function arguments
- 1. Czy sass @mixin może przyjmować niezdefiniowaną liczbę argumentów?
- 2. argparse: Uzyskaj niezdefiniowaną liczbę argumentów
- 3. Czy właściwość C# może przyjmować wiele wartości?
- 4. Czy instrukcja switch może przyjmować dwa argumenty?
- 5. Czy fragmenty mogą przyjmować parametry w windzie?
- 6. Czy akcja/delegat może zmienić wartość argumentów?
- 7. W jaki sposób funkcja rozprzestrzeniania tidyr może przyjmować zmienną jako wybrana kolumna
- 8. Jak zmniejszyć liczbę argumentów szablonu?
- 9. Funkcja pułapki przez przekazywanie argumentów?
- 10. Przekazywanie zmiennej liczby argumentów
- 11. Czy C++ 11 std :: function ogranicza liczbę argumentów, które może mieć wskaźnik funkcji?
- 12. Funkcja wywołania z tablicą argumentów
- 13. Google Firebase Error (funkcja zwróciła niezdefiniowaną, oczekiwaną obietnicę lub wartość)
- 14. Funkcja JavaScript zwracająca niezdefiniowaną wartość w węźle js
- 15. Python lista argumentów funkcja formatowania
- 16. Jak mogę znaleźć liczbę argumentów funkcji szablonu?
- 17. funkcji o zmiennej liczbie argumentów argumentów kluczowych
- 18. Uzyskaj liczbę argumentów dla funkcji klasy
- 19. Jak uzyskać liczbę argumentów `std :: function`?
- 20. Czy funkcja Twig_SimpleFunction może modyfikować kontekst?
- 21. Czy funkcja JavaScript może się zwrócić?
- 22. o zmiennej liczbie argumentów funkcja szablon z równych typów argumentów
- 23. Pętla przez nieznaną liczbę argumentów tablicy
- 24. szyny simple_nested_form_for fields_for niewłaściwą liczbę argumentów
- 25. Uzyskaj liczbę argumentów (lub nawet nazw) obiektu funkcji javascript
- 26. zsh funkcja autouzupełniania na podstawie 2 argumentów
- 27. Czy serwer Node.js może przyjmować przychodzące żądania, gdy kolejka zdarzeń jest zablokowana?
- 28. Czy notatnik programu Jupyter/IPython może przyjmować argumenty w adresie URL?
- 29. Czy klasa może mieć szablonowy konstruktor bez argumentów?
- 30. Zmienna liczba argumentów w procedurze przechowywanej PL/SQL
możliwy duplikat [Uzyskiwanie dostępu do niezdefiniowanych argumentów] (http://stackoverflow.com/questions/1151053/accessing-undefined-arguments) – PhoneixS