PHP:Примените функцию к нескольким переменным без использования массива
Вопрос
У меня есть функция (для простоты я просто использую count()), которую я хочу применить, возможно, к 4-5 различным переменным.Прямо сейчас я делаю это:
$a = count($a);
$b = count($b);
$c = count($c);
$d = count($d);
Есть ли лучший способ?Я знаю, что массивы могут использовать функцию array_map, но я хочу, чтобы значения оставались отдельными значениями, а не значениями внутри массива.
Спасибо.
Решение
Я знаю, вы сказали, что не хотите, чтобы значения были в массиве, но как насчет того, чтобы просто создать массив специально для перебора значений?т. е.:
$arr = Array($a, $b, $c, $d);
foreach ($arr as &$var)
{
$var = count($var);
}
Хотя я не уверен, что это действительно намного опрятнее, чем первоначальный способ.
Другие советы
Если у вас есть куча повторяющихся переменных для сбора данных, ваш код плохо разработан и должен просто использовать массив для хранения значений, а не десятки переменных.Так что, возможно, вы хотите что-то вроде:
$totals = array("Visa"=>0,"Mastercard"=>0,"Discover"=>0,"AmericanExpress"=>0);
затем вы просто добавляете в свой элемент массива (скажем, из цикла while из вашего SQL или что бы вы ни делали)
$totals['Visa'] += $row['total'];
Но если вы действительно хотите пойти по этому пути, вы могли бы использовать предоставленные вам инструменты, если вы хотите сделать это с большим пакетом, то массив - хороший выбор.Затем передайте массив и используйте переменные variable, например, так:
$variables = array('a','b','c'...);
foreach ( $variables as $var )
{
${$var} = count(${var});
}
То, что сказали Бен и Тревизо, но использовать массив_поход для немного более чистого кода:
$arr = Array($a, $b, $c, $d); array_walk($arr, count);
Вы можете использовать extract для повторного извлечения значений.
//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";
Как вы оцениваете "лучше"?Возможно, вы смогли бы придумать что-нибудь умное и короткое, но то, что у вас есть, кажется самым простым для понимания, а это задание 1.Я бы оставил все как есть, но присвоил новым переменным (например$sum_a, ...).