多数の変数があり、これらの変数のどれだけがゼロに等しいかを示す数値を出力する必要があります。
$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;
すべての変数を配列に入れ、foreach でループし、$zeros 変数に追加します。
$values = array('0' => $var1, '1' => $var2, '2' => $var3);
$zeros = 0;
foreach($values as $v) {
if($v === '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
基本的に、通常の if then else を使用する代わりに、3 項条件式をネストしました。