2012-02-11 4 views
0

У меня есть скрипт, похожий на базу данных whois. Эта функция возвращает вид сайта, и я хочу эхо между значением.PHP Эхо число, используя else, если и больше или меньше

Как я могу эхо и вернуть один результат? Если число говорят 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

+0

В чем вопрос? –

+0

Извините, я обновил сообщение. – TheBlackBenzKid

ответ

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 Итак, в чем проблема? В итоге это будет имя $ name с фамилией в массиве, что мы и хотим. Невозможно увидеть здесь «неправильный путь»! –

+0

Вы правы, не читали правильно – Kaii

2

Вы можете создать функцию, возвращающий интервал. Когда функция попадает в оператор return, он перестает выполняться, поэтому вы получите только одно значение. После этого вы можете вызвать функцию и повторить результат:

function getInterval($siteTotalViews) { 

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

    ... 

} 

echo getInterval(1000); 
+0

Должен ли я использовать else, если хотя бы как код выше? – TheBlackBenzKid

+0

@TheBlackBenzKid Нет, вам не нужно использовать else, если, так как если первый оператор if недействителен, он просто попробует следующий, пока не достигнет значения true. –

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

почти то же самое. вы действительно не должны заботиться о микро-оптимизации здесь. фактически, счетчик ifs, выполненный здесь, такой же, как и без цикла. единственные накладные расходы, которые у вас есть, - это массив и цикл - не волнуйтесь. – Kaii

+0

@ TheBlackBenzKid: Не имеет значения. Это гораздо лучшее решение. – Ryan

Смежные вопросы