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.

È stato utile?

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, .. .).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top