2012-02-11 102 views
0

我有一個腳本,它就像一個whois數據庫。這個函數返回站點視圖,我想在值之間回顯。PHP使用else迴應一個數字if和大於或小於

如何回顯並返回一個結果?如果數字是說4000,它應該只返回1K-10K

行就像

百萬

代碼:

$siteTotalViews=1000000; 
if($siteTotalViews <= 100){ 
    echo '0-100'; 
} 
if($siteTotalViews <= 1000){ 
    echo '100-1k'; 
} 
if($siteTotalViews <= 10000){ 
    echo '1k-10k'; 
} 
if($siteTotalViews <= 100000){ 
    echo '10k-100k'; 
} 
if($siteTotalViews <= 1000000){ 
    echo '100k-1 mil'; 
} 
if($siteTotalViews <= 2000000){ 
    echo '1 mil-2 mil'; 
} 
if($siteTotalViews <= 5000000){ 
    echo '2 mil-5 mil'; 
} 
if($siteTotalViews <= 10000000){ 
    echo '5 mil-10 mil'; 
} 
if($siteTotalViews >= 10000000){ 
    echo '10 mil +'; 
} 
+3

因此,你的問題是......? – Ryan 2012-02-11 17:56:22

+0

問題是什麼? – 2012-02-11 17:56:30

+0

對不起,我更新了我的帖子。 – TheBlackBenzKid 2012-02-11 17:58:31

回答

2

快速修復:

$siteTotalViews=1000000; 
if($siteTotalViews <= 100){ 
    echo '0-100'; 
} 
//next else is new 
else if($siteTotalViews <= 1000){ 
    echo '100-1k'; 
} 
//next else is new 
else if($siteTotalViews <= 10000){ 
    echo '1k-10k'; 
} 
//next else is new 
else if($siteTotalViews <= 100000){ 
    echo '10k-100k'; 
} 

更好的解決辦法:

$names=array(
    100 => '0-100', 
    1000 => '100-1k', 
    10000 => '1k-10k', 
    ... 
} 

foreach ($names as $count=>$name) 
    if ($siteTotalViews<$count) break; 

echo $name; 
+0

@Kaii那麼問題是什麼?它將以數組中的姓氏結尾,這正是我們想要的。無法在這裏看到「錯誤的方式」! – 2012-02-11 18:31:05

+0

你說得對,沒有正確閱讀 – Kaii 2012-02-11 19:05:02

2

您可以創建一個返回間隔的功能。當函數碰到return語句時,它會停止執行,所以你只會返回一個值。然後,你可以調用函數和回聲結果:

function getInterval($siteTotalViews) { 

    if($siteTotalViews <= 100){ 
     return '0-100'; 
    } 
    if($siteTotalViews <= 1000){ 
     return '100-1k'; 
    } 

    ... 

} 

echo getInterval(1000); 
+0

如果像上面的代碼那樣,我還得使用別的嗎? – TheBlackBenzKid 2012-02-11 18:09:15

+0

@TheBlackBenzKid不,你不應該使用else,因爲如果第一個if語句無效,它只會嘗試下一個,直到它到達真實的語句。 – 2012-02-11 18:17:38

0
$siteTotalViews=1000000; 
if($siteTotalViews >= 0 && $siteTotalViews <=100){  
echo '0-100'; } 
if($siteTotalViews >=101 && $siteTotalViews <= 1000){  
echo '100-1k'; } 
..... 
    if($siteTotalViews >= 10000000){  
echo '10 mil +'; } 
2

你可以把所有的反向陣列上的限制和其對應的文本到一個數組,然後循環找到合適的輸出。 (break當限制已被擊中時循環)

$siteTotalViews=1000000; 
$outputs = array(
    0 => '0-100', 
    100 => '100-1k', 
    1000 => '1k-10k', 
    10000 => '10k-100k', 
    100000 => '100k-1 mil', 
    1000000 => '1 mil-2 mil', 
    2000000 => '2 mil-5 mil', 
    5000000 => '5 mil-10 mil', 
    10000000 => '10 mil +'); 
$outputs = array_reverse($outputs); 

foreach ($outputs as $limit => $text) { 
    if ($siteTotalViews >= $limit) { 
    echo $text; 
    break; 
    } 
} 
+0

與使用if和else if語句 – TheBlackBenzKid 2012-02-11 18:10:43

+0

幾乎相同的速度相比,速度如何?你真的不應該在乎這裏的微觀優化。事實上,這裏執行的ifs的數量與沒有循環的數量相同。你唯一的開銷是數組和循環 - 不關心。 – Kaii 2012-02-11 18:11:47

+0

@TheBlackBenzKid:沒關係。這是一個更好的解決方案。 – Ryan 2012-02-11 18:11:52