2012-05-29 4 views
1

Можно создать дубликат:
php if statement with multiple conditionsPHP: упростить множественные || операторы в одном?

У меня есть этот код:

if(x==1 || x==2 || x==3 || x==4)

есть в любом случае просто короче? Например:

if(x==1||2||3||4)

Значение для утверждения, чтобы быть правдой, если X = 1,2,3 или 4?

Заранее спасибо.

Edit: (Спасибо за все ответы, вот некоторые разъяснения)

У меня есть время цикл, но только хочу конкретные записи базы данных будут называться. Мой код текущий

<?php while(the_repeater_field('team_members','options') && get_sub_field('member_sort') == 1 : ?> 
<div class="one_fourth"> 
     <img src="<?php the_sub_field('image'); ?>" alt="" /> 
     <p> 
      <?php the_sub_field('info'); ?> 
      <br /> 
      <a href="mailto:<?php the_sub_field('email'); ?>"><?php the_sub_field('email'); ?></a> 
     </p> 
</div> 
<?php endwhile; ?> 

Сейчас он отлично работает с == 1, но я также хочу показать 2,3,4. Я просто не знаю, как Я должен был поставить код для выполнения 1 || 2 || 3 || 4

Update 2:

Хорошо, так что я использовал следующий код, но я предполагаю, Я делаю это неправильно. Следующий код показал только запись, равную 1 .. но не записи, равные 2,3,4 ... Я думаю, потому что цикл while работает только один раз, так как оператор становится истинным мгновенно.

<?php while(the_repeater_field('team_members','options') && in_array(get_sub_field('member_sort'),array(1,2,3,4))): ?> 
         <div class="one_fourth"> 
          <img src="<?php the_sub_field('image'); ?>" alt="" /> 
          <p> 
           <?php the_sub_field('info'); ?> 
           <br /> 
           <a href="mailto:<?php the_sub_field('email'); ?>"><?php the_sub_field('email'); ?></a> 
          </p> 
         </div> 
        <?php endwhile; ?> 
+1

Что случилось с более длинным кодом? Какую проблему ты пытаешься решить? Будет ли ['switch' statement] (http://rosettacode.org/wiki/Conditional_structures#switch_12) работать в вашем случае? – sarnold

+0

@ sarnold Я обновил свой вопрос. @mario, спасибо за ссылки. – Damainman

ответ

5
if (in_array($x, array(1,2,3,4)) 

или даже:

if (in_array($x, range(1, 4))) 

ОК, этот вопрос эволюционировал совсем немного, но я думаю, что проблема в том, что теперь вы хотите, чтобы цикл по всем значениям, но только делать вещи на определенные условия. Вы можете использовать оператор continue, чтобы прервать текущую итерацию и сразу перейти к следующему.

<?php while (the_repeater_field('team_members','options')) : ?> 
    <?php if (!in_array(get_sub_field('member_sort'), array(1,2,3,4))) continue; ?> 

    ... do stuff 

<?php endwhile; ?> 
+0

in_array медленный, однако - см .: us3.php.net/manual/en/function.in-array.php#93880 – damianb

+1

Ну, я думаю, что предмет диапазона бессмыслен ... может сделать '$ x> = 1 && $ x <= 4 && is_int ($ x) ' –

+1

@damianb Сколько миллионов раз вам нужно для запуска этой строки кода? Если ваш ответ <10, я сомневаюсь, что вы заметите. – Okonomiyaki3000

1

Это зависит от того, сколько у вас есть, и от того, могут быть и другие условия, но либо switch:

switch(x) { 
    case 1: 
    case 2: 
    case 3: 
    case 4: 
     break; 
    default: 
     // Do stuff 
} 

Или массив, особенно для многих элементов:

if(!in_array(x, array(1, 2, 3, 4)) { 
    // Do stuff 
} 
+0

Спасибо, что нашли время, чтобы ответить. Я не уверен, как реализовать случаи переключения для работы с моим кодом выше или знать, должен ли я идти по этому маршруту. – Damainman

+0

@ Damainman: Чтобы реализовать его с помощью NOT, вы имеете в виду? Здесь я обновил его. – Ryan

1

Если вы используете PHP 5.4+, вы можете сделать это:

if (in_array($x, [1,2,3,4])) 

В противном случае, это:

if (in_array($x, array(1,2,3,4))) 
+0

in_array является медленным, однако его следует использовать экономно; см .: us3.php.net/manual/en/function.in-array.php # 93880 – damianb

+0

@damianb Я думаю, что комментарий пропущен, потому что для создания ассоциативного индекса требуется много времени. Плюс он не сравнивается с выражением или. Но я согласен, что in_array может быть тиком медленнее. Но только немного. –

+0

Более или менее, с простыми варами, да; когда вы начинаете попадать в объекты, это начинает иметь огромное значение. – damianb

0

Там нет никакого способа. Только с помощью массивов.

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