2010-04-29 67 views
5

我正在處理一個類來處理php中的html十六進制顏色代碼。在內部,該類將RGB值視爲小數。當我加入或減去時,我從來不希望該值超過255,也不會將「subceed」置零。在php中unsigned tinyint?

如果當然,我可以做一些零碎像

if ($val > 255) { 
    $val = 255; 
} 
if ($val < 0) { 
    $val = 0; 
} 

但是,這是冗長:P

有一個聰明,一個linish方法可以讓我得到的價值留在0和255之間?

回答

11

你可能會這樣說: $ val = max(0,min(255,$ val));

1

使用bitwise OR operator會工作

if(($num | 255) === 255) { /* ... */ } 

例子:

foreach (range(-1000, 1000) as $num) { 
    if(($num | 255) === 255) { 
     echo "$num, "; 
    }; 
} 

會打印出所有的數字從0到255

+0

爲什麼要打擾ORing?一個簡單的'$ var&= 0xFF'會將這個值屏蔽到0-255的範圍 – 2010-04-29 17:52:20

+0

@MarcB關於使用OR有什麼困擾* – Gordon 2010-04-29 19:31:33

+0

馬克B的回答很有道理 - 我不明白戈登想要達到的目標。 – symcbean 2010-04-29 22:07:29

0

或者你可能是人誰使用嵌套三元運營商。

例如。

(($num > 255) ? 255 : (($num < 0) ? 0 : $num)) 
+0

嵌套的三元運算符只對個人興趣有趣。 – 2011-07-02 10:12:06

+0

他們要求一個聰明的單行代碼,我認爲這符合該定義(除了需要包含的額外文檔行外) – 2011-07-05 13:49:58

+0

@Jonathan我和你在一起到最後。我會不止給予一點意見? – user151841 2011-07-05 19:23:30