for($i=0;$i<$num;$i++) {
if($i==even) $hilite="hilite";
dothing($i,$hilite);
}
これは基本的に私が達成したいことです。$i が偶数かどうかを判断する最も効率的な方法は何ですか? 半分 == mod 2 かどうかを確認できることはわかっていますが、計算が少し過剰に思えますか? もっと簡単な方法はありますか?
もし ($i % 2 == 0)
$i % 2 == 0 より簡単にはなりません。
前述の% 2
構文は最もよく使用され、他のプログラマにとって最も読みやすいものです。計算の「オーバーヘッド」を本当に避けたい場合:
for($i = 0, $even = true; $i < $num; $i++, $even =! $even) {
if($even) $hilite = "hilite";
dothing($i,$hilite);
}
割り当て自体はおそらく '%2' (本質的に単なるビット シフト) よりも多くの作業になります。
ループ ステートメントの i++ を i+=2 に変更して、i の偶数値のみを調べるようにします。
通常、LSB (最下位ビット) が設定されている場合、数値は奇数です。このビットの状態は、ビットごとのAND 演算子を使用して確認できます。
if($testvar & 1){
// $testvar is odd
}else{
// $testvar is even
}
上記のコードでは、より効率的な方法は$i
、すべてのループで 2 ずつインクリメントすることです (奇数値を無視できると仮定します)。
for($i=0;$i<$num;$i+=2){
// $i will always be even!
}