PHP:Примените функцию к нескольким переменным без использования массива

StackOverflow https://stackoverflow.com/questions/417373

  •  03-07-2019
  •  | 
  •  

Вопрос

У меня есть функция (для простоты я просто использую 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, ...).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top