1 veya daha fazla numara alır ve onların toplamını döndürür PHP bir işlevi olması mümkün mü?
Bu fonksiyon yararlanmak func_num_args ve func_get_arg şeklinde olabilir:
function sum() {
for($i=0,$sum=0;$i<func_num_args();$i++) {
$sum += func_get_arg($i);
}
return $sum;
}
Ve işlevi olarak çağırır:
echo sum(1); // prints 1
echo sum(1,2); // prints 3
echo sum(1,2,3); // prints 6
Evet, öyle
function sum() {
$args = func_get_args();
return array_sum($args);
}
echo sum(1, 2, 3, 4);
Ayrıca bu kavram herhangi bir dizi işlevi sarmak mümkün daha soyut olması olabilir
function mapargs() {
$args = func_get_args();
return call_user_func(array_shift($args), $args);
}
echo mapargs('array_sum', 1, 2, 3, 4);
ya da bunun dışında bir currified varargs mapper-sarıcı
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);
Bu yardımcı olur umarım!
sadece kullanmak array_sum():
$sum = array_sum($arrayOfValues);
Take a look at func_get_args( ). It returns an array containing all arguments passed to the function, basically exactly what you want.
Sen func_num_args( ), doğrudan argümanların sayısını almak için kullanabilirsiniz.
Ancak çoğu durumda, daha iyi yerine sadece işlevin bir dizi geçmek, bu olduğunu unutmayın. Yukarıdaki fonksiyonları oluşturmak ve fonksiyonuna doğrudan diziler geçemiyor kolay ve / veya daha okunabilir olduğu özel durumlar için düşünülmüştür.
Bu önemsiz oldukça gerçekçi, örneğin avantajları gösterir:
// 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() açıkça kullanımı kolaydır ve bunun için çağrılar bu durumda daha okunabilir.
Yukarıdaki çözüm argümanların rastgele bir miktar almak için bir işlev nasıl genel olduğunu. Sorunun sadece diğer cevaplar belirttiği gibi array_add() kullanmak, bazı numaraları ekleme hakkında gerçekten olup olmadığını.