PHP: применить функцию к нескольким переменным без использования массива - PullRequest
0 голосов
/ 06 января 2009

У меня есть функция (для простоты, я просто буду использовать count ()), которую я хочу применить к 4-5 различным переменным. Прямо сейчас я делаю это:

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

Есть ли лучший способ? Я знаю, что массивы могут использовать функцию array_map, но я хочу, чтобы значения оставались отдельными значениями, а не значениями внутри массива.

Спасибо.

Ответы [ 5 ]

4 голосов
/ 06 января 2009

Я знаю, что вы сказали, что не хотите, чтобы значения были в массиве, но как насчет создания массива специально для циклического перебора значений? i.e.:

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

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

Я не уверен, что это действительно намного аккуратнее, чем оригинальный способ.

3 голосов
/ 06 января 2009

Если у вас есть куча повторяющихся переменных для сбора данных, ваш код плохо спроектирован и должен просто использовать массив для хранения значений вместо десятков переменных. Так что, возможно, вы хотите что-то вроде:

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

затем вы просто добавляете в свой элемент массива (скажем, из цикла while ваш SQL или что вы делаете)

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

Но если вы действительно хотите пойти по этому пути, вы можете использовать предоставленные вам инструменты, если вы хотите сделать это с большой партией, тогда массив - это хороший выбор. Затем создайте массив и используйте переменные, например:

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

foreach ( $variables as $var )
{
    ${$var} = count(${var});
}
1 голос
/ 06 января 2009

То, что сказали Бен и ТрэвисО, но используйте array_walk для немного более чистого кода:

$arr = Array($a, $b, $c, $d);
array_walk($arr, count);
0 голосов
/ 12 января 2009

Вы можете использовать извлечение, чтобы вернуть значения снова.

//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";
0 голосов
/ 06 января 2009

Как вы оцениваете «лучше»? Возможно, вам удастся придумать что-нибудь умное и более короткое, но то, что у вас есть, кажется, проще всего понять - это задание 1. Я бы оставил все как есть, но назначил бы новые переменные (например, $ sum_a, .. .).

...