Pregunta

Tengo una función (por facilidad, solo usaré count ()) que quiero aplicar a quizás 4-5 variables diferentes. En este momento, estoy haciendo esto:

$a = count($a);
$b = count($b);
$c = count($c);
$d = count($d);

¿Hay una mejor manera? Sé que las matrices pueden usar la función array_map, pero quiero que los valores permanezcan como valores separados, en lugar de valores dentro de una matriz.

Gracias.

¿Fue útil?

Solución

Sé que dijiste que no quieres que los valores estén en una matriz, pero ¿qué tal si creas una matriz específicamente para recorrer los valores? es decir:

$arr = Array($a, $b, $c, $d);

foreach ($arr as &$var)
{
   $var = count($var);
}

No estoy seguro si eso es mucho más ordenado que la forma original, sin embargo.

Otros consejos

Si tiene un montón de variables repetidas para recopilar datos, su código está mal diseñado y debería estar usando una matriz para almacenar los valores, en lugar de docenas de variables. Entonces quizás quieras algo como:

$totals = array("Visa"=>0,"Mastercard"=>0,"Discover"=>0,"AmericanExpress"=>0);

luego simplemente agrega a su elemento de matriz (digamos desde un bucle while de su SQL o lo que sea que esté haciendo)

$totals['Visa'] += $row['total'];

Pero si realmente desea seguir esta ruta, puede utilizar las herramientas que se le proporcionan, si desea hacer esto con un lote grande, entonces una matriz es una buena opción. Luego, predique la matriz y use variables variables, así:

$variables = array('a','b','c'...);

foreach ( $variables as $var )
{
    ${$var} = count(${var});
}

Lo que dijeron Ben y TravisO, pero use array_walk para obtener un código un poco más limpio:

$arr = Array($a, $b, $c, $d);
array_walk($arr, count);

Puede usar extracto para recuperar los valores nuevamente.

//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";

¿Cómo se mide " mejor " ;? Es posible que se te ocurra algo inteligente y más corto, pero lo que tienes parece ser más fácil de entender, que es el trabajo 1. Lo dejaría como está, pero lo asignaré a nuevas variables (por ejemplo, $ sum_a, .. .).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top