我有很多变量,我需要为这些变量中有多少等于零打印一个数值:
$var1 = '2';
$var2 = '0';
$var3 = '4';
//check how many variables = 0
$zeros = ?
//should be a numeric value this example should print '1'
echo $zeros
感谢您的任何建议!
这将获取所有已定义变量的列表,并计算有多少是=== 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());
然后该函数可以检测数组并调用自身,直到搜索完所有变量。
if($var1 == 0) $zeros++;
重复 var2、3 等。
如果它们都遵循其中是数字的模式,则使用变量变量从字符串生成变量。varX
X
$var1 = '2';
$var2 = '0';
$var3 = '4';
$zeros = 0;
for($i = 1; $i <= 3; $i++) {
$var = ${'var' . $i};
if($var == 0) $zeros ++;
}
echo $zeros;
我不明白您在这里尝试实现的目的,也许我误解了需求,但以下但简单的代码可以做到这一点:
$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。
我将所有变量放入一个数组中,使用 foreach 循环并添加到 $zeros 变量中:
$values = array('0' => $var1, '1' => $var2, '2' => $var3);
$zeros = 0;
foreach($values as $v) {
if($v === '0')
$zeros++;
}
echo $zeros;
我发现这是一个简单的解决方案,不过感谢您的输入!