2009-11-07 19 views

risposta

8

In questo caso specifico, utilizzare array_product():

function mul() { 
    return array_product(func_get_args()); 
} 

Nel caso generale? No, non è possibile passare un operatore come richiamata a una funzione. Dovresti almeno metterlo in una funzione:

function mul() { 
    return array_reduce(func_get_args(), 'mult', 1); 
} 

function mult($a, $b) { 
    return $a * $b; 
} 
+0

bello, non ho mai visto quella funzione, chiedendomi se è un'operazione comune, non ho mai avuto la possibilità di usarlo – RageZ

5

Il codice che hai fornito non funzionava ma puoi fare qualcosa di simile.

function mul() 
{ 
    return array_reduce(func_get_args(), create_function('$a,$b', 'return "$a * $b')); 
} 

create_function consente di creare a breve la funzione (uno di linea), se la funzione è sempre più lungo di una dichiarazione che è meglio per creare una vera e propria funzione per fare il lavoro.

Si prega di notare anche che le virgolette sono importanti perché si utilizza il simbolo del dollaro, quindi non si vuole che PHP cerchi di sostituirle.

1

Se io definisco la funzione e poi fare questo:

 
$arr = array(2,3,4,5,6); 
mul($arr); 

ottengo il seguente avvertimento:

 
Warning: array_reduce(): The second argument, '*', should be a valid callback in /home/azanar/Documents/Projects/testbed/test.php on line 6 

Le altre due risposte qui fanno bene ad affrontare un modo di lavoro di fare questo. Tuttavia, è generalmente una buona abitudine, quando ti chiedi se qualcosa è permesso in una particolare lingua, solo provarlo e vedere cosa succede. Potresti essere sorpreso da ciò che alcune lingue consentono e, in caso contrario, ti faranno quasi sempre un messaggio di errore significativo.

0

PHP 5.3 ha chiusure;)

Problemi correlati