PHP: applica una funzione a più variabili senza usare un array
Domanda
Ho una funzione (per semplicità, userò solo count ()) che voglio applicare forse a 4-5 variabili diverse. In questo momento, lo sto facendo:
$a = count($a);
$b = count($b);
$c = count($c);
$d = count($d);
C'è un modo migliore? So che le matrici possono usare la funzione array_map, ma voglio che i valori rimangano come valori separati, anziché valori all'interno di un array.
Grazie.
Soluzione
So che hai detto che non vuoi che i valori si trovino in un array, ma che ne dici di creare un array in modo specifico per fare un ciclo tra i valori? cioè:.
$arr = Array($a, $b, $c, $d);
foreach ($arr as &$var)
{
$var = count($var);
}
Non sono sicuro che sia davvero molto più ordinato del modo originale, però.
Altri suggerimenti
Se hai un sacco di variabili ripetute per raccogliere dati, il tuo codice è mal progettato e dovrebbe semplicemente usare un array per memorizzare i valori, invece di dozzine di variabili. Quindi forse vuoi qualcosa del tipo:
$totals = array("Visa"=>0,"Mastercard"=>0,"Discover"=>0,"AmericanExpress"=>0);
quindi aggiungi semplicemente al tuo elemento array (diciamo da un ciclo while dal tuo SQL o qualunque cosa tu stia facendo)
$totals['Visa'] += $row['total'];
Ma se vuoi davvero seguire questa strada, potresti usare gli strumenti che ti vengono forniti, se vuoi farlo con un batch di grandi dimensioni, allora un array è una buona scelta. Quindi raggiungi l'array e usa le variabili variabili, in questo modo:
$variables = array('a','b','c'...);
foreach ( $variables as $var )
{
${$var} = count(${var});
}
Cosa hanno detto Ben e TravisO, ma usa array_walk per un codice un po 'più pulito:
$arr = Array($a, $b, $c, $d); array_walk($arr, count);
È possibile utilizzare extract per ripristinare nuovamente i valori.
//test data
$a = range(1, rand(4,9));
$b = range(1, rand(4,9));
$c = range(1, rand(4,9));
//the code
$arr = array('a' => $a, 'b' => $b, 'c' => $c);
$arr = array_map('count', $arr);
extract($arr);
//whats the count now then?
echo "a is $a, b is $b and c is $c.\n";
Come si misura " meglio " ;? Potresti essere in grado di trovare qualcosa di intelligente e più breve, ma quello che hai sembra più facile da capire, che è il lavoro 1. Lo lascerei così com'è, ma assegnerei a nuove variabili (ad esempio $ sum_a, .. .).