2012-02-11 3 views
0

私はwhoisデータベースのようなスクリプトを持っています。この関数はサイトビューを返し、値の間にエコーしたい。PHP elseを使用して数値をエコーする

どのようにエコーして1つの結果を返すことができますか?

$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

+0

何が問題なのですか? –

+0

申し訳ありませんが、私の投稿を更新しました。 – TheBlackBenzKid

答えて

2
:数が4000を言っている場合は、それだけで 1K-10K

行が

コードのようなものを返す必要があります

クイックフィックス:

$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

@カイイ何が問題なの? $ nameは配列内に最後の名前を持つことになります。これはまさに私たちが望むものです。ここで "間違った方法"を見ることができません! –

+0

あなたは正しいですが、正しく読まなかった – Kaii

2

あなたは間隔を返す関数を作成することができます。関数がreturn文を実行すると、関数は実行を停止するので、値を1つ戻すだけです。次に、関数を呼び出し、結果をエコーすることができます

function getInterval($siteTotalViews) { 

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

    ... 

} 

echo getInterval(1000); 
+0

上記のコードのように他のものを使用する必要がありますか? – TheBlackBenzKid

+0

@TheBlackBenzKidいいえ、elseを使用する必要はありません。最初のif文が有効でない場合は、trueになるまで次のtry文を試します。 –

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

+0

はほとんど同じです。ここではマイクロ最適化にはまったく関心がありません。実際、ここで実行されるifの数は、ループなしの場合と同じです。唯一のオーバーヘッドは配列とループです - 気にしないでください。 – Kaii

+0

@ TheBlackBenzKid:問題ではありません。はるかに良い解決策です。 – Ryan

関連する問題