0

我有很多变量,我需要为这些变量中有多少等于零打印一个数值:

$var1 = '2';
$var2 = '0';
$var3 = '4';

//check how many variables = 0
$zeros = ?

//should be a numeric value this example should print '1'
echo $zeros

感谢您的任何建议!

4

4 回答 4

3

这将获取所有已定义变量的列表,并计算有多少是=== 0和排除$_GET$_POST$_COOKIE全局变量。

如果您在函数中定义此代码,则仅计算该范围内的变量。

<?php 

$value = 0;
$var   = 1;
$test  = false;
$nine  = 0;
$zero  = 9;

$zeroes = 1;  // set to 1 so we don't count this

$vars = get_defined_vars();

foreach($vars as $var) {
    if (is_array($var) && (
      isset($var['_GET']) || isset($var['_POST']) ||
      isset($var['_COOKIE']))
    ) {
        continue;  // don't count superglobal arrays
    }

    if ($var === 0) $zeroes++;
}

$zeroes -= 1;  // subtract the initial value

echo "There are $zeroes zero values.";  // There are 2 zero values.

编辑:例如,如果您需要检查数组的值,可以将其修改为递归工作的函数。您可以像这样从全局范围调用它:

$zeroes = countZero(get_defined_vars());

然后该函数可以检测数组并调用自身,直到搜索完所有变量。

于 2012-08-03T03:28:04.233 回答
0

if($var1 == 0) $zeros++;重复 var2、3 等。

如果它们都遵循其中是数字的模式,则使用变量变量从字符串生成变量。varXX

$var1 = '2';
$var2 = '0';
$var3 = '4';
$zeros = 0;

for($i = 1; $i <= 3; $i++) {
  $var = ${'var' . $i};
  if($var == 0) $zeros ++;
}

echo $zeros;
于 2012-08-03T03:24:41.547 回答
0

我不明白您在这里尝试实现的目的,也许我误解了需求,但以下但简单的代码可以做到这一点:

$var1 = '2';
$var2 = '0';
$var3 = '4';

$zeros = ($var1 =='0')?1:0 + ($var2 =='0')?1:0 + ($var3 =='0')?1:0;
echo $zeros

基本上我嵌套了 ternaly 条件表达式,而不是使用常规 if then elses。

于 2012-08-03T03:27:50.030 回答
0

我将所有变量放入一个数组中,使用 foreach 循环并添加到 $zeros 变量中:

$values = array('0' => $var1, '1' => $var2, '2' => $var3);

$zeros = 0;

foreach($values as $v) {
    if($v === '0')
    $zeros++;
 }

echo $zeros;

我发现这是一个简单的解决方案,不过感谢您的输入!

于 2012-08-03T07:55:56.737 回答