2012-08-03 80 views
0

等於零我有很多的變化,我需要打印的數值爲多少,這些變量都等於零:檢查多少變量用PHP

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

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

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

感謝您的任何建議!

+2

一個數組會比單獨的變量好很多 – 2012-08-03 03:26:01

+1

更好的使用[arrays](http://php.net/manual/en/language.types.array.php),因爲它不是很難學它 – Hawili 2012-08-03 03:26:23

+0

我結束了使用數組,謝謝你的迴應,我的解決方案在下面! – tcd 2012-08-03 18:33:09

回答

0

我把我所有的變量到一個數組,用foreach循環,並添加到$零變量:

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

$zeros = 0; 

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

echo $zeros; 

,我發現這是一個簡單的解決方案,感謝投入,但!

0

if($var1 == 0) $zeros++;重複了VAR2,3等

使用variable variables生成一個字符串變量,如果它們都遵循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; 
0

我不明白你正在嘗試什麼在這裏實現,也許我誤解的需要,但下面而又簡單的代碼做的目的:

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

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

基本上我嵌套ternaly conditional expressions,而不是然後使用常規,如果然後elses。

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()); 

然後功能可以檢測陣列和,直到它已搜索了所有瓦爾調用自身。

+0

我實際上使用了一些GET變量! – tcd 2012-08-03 05:20:04

+0

在這種情況下,遞歸函數選項聽起來像是要走的路,並刪除'isset($ var ['_ GET'])'檢查,以便它不會忽略$ _GET變量。 – drew010 2012-08-03 16:22:36