for($i=0;$i<$num;$i++) {
if($i==even) $hilite="hilite";
dothing($i,$hilite);
}
這基本上是我想要完成的。 確定$ i是否是偶數的最有效方法是什麼? 我知道我可以檢查一半== mod 2 ...但是這似乎有點過度的計算?有一種更簡單的方法嗎?根據另一個變量的偶數/奇數狀態更改變量?
for($i=0;$i<$num;$i++) {
if($i==even) $hilite="hilite";
dothing($i,$hilite);
}
這基本上是我想要完成的。 確定$ i是否是偶數的最有效方法是什麼? 我知道我可以檢查一半== mod 2 ...但是這似乎有點過度的計算?有一種更簡單的方法嗎?根據另一個變量的偶數/奇數狀態更改變量?
如果($ I%2 == 0)
將循環語句中的i ++更改爲i + = 2,以便僅檢查i的偶數值?
它沒有得到任何簡單得多$ I%2 == 0期。
通常,如果設置了LSB(最低有效位),則數字爲奇數。您可以通過使用bitwise 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!
}
已經提到% 2
語法是最常用的,並且最可讀用於其他程序員。如果你真的想避免計算的「開銷」:
for($i = 0, $even = true; $i < $num; $i++, $even =! $even) {
if($even) $hilite = "hilite";
dothing($i,$hilite);
}
雖然分配本身可能是更多的工作,那麼「%2」(這是本質上只是一個位移位)。
如果您將數字修改爲2,結果將永遠不會爲2.它始終是(假設$ i不是以負數開頭)0或1.它應該讀取'$ i%2 == 0 '。 – sigint 2010-07-21 19:52:03
哎呀,傻的錯字。當然你是對的。 – delnan 2010-07-21 19:57:19
哦,是的,這是一個有趣的錯字必須調試... – sigint 2010-07-21 20:02:45