2013-09-12 4 views
0

Пытается написать простую функцию PHP, которая принимает массив, а затем выплескивает определенный код в зависимости от количества массивов. На моем тестовом примере два пользователя, первый if имел место, когда второй должен иметь.PHP Array Count - IF/Elseif

Ниже приведен код:

Я думаю, что проблема заключается в них:

if (count($users) == '1' || '3') {

if (count($users) == '2' || '4') {

Но я не уверен!

<?php 
    $template_directory = get_template_directory_uri(); 
    $users = get_users(); 
    if (count($users) == '1' || '3') { 
     foreach ($users as $user) { 
     if ($user->displayname != '') { 
      echo '<div class="col-lg-4 col-md-4 col-sm-4">'; 
      echo '<div class="selection-member">'; 
       echo '<div class="individual-pic">'.get_avatar($user).'</div>'; 
       echo '<h4 class="selection-name">' .$user->displayname. '</h5>'; 
       echo '<h5 class="grey-tagline">'.$user->jobtitle.'</h5>'; 
       echo '<div class="selection-text quick-center">'; 
       echo '<p>' . $user->desc . '</p>'; 
       echo '</div> <!-- end selection-text -->'; 
       echo '<div class="team-twitter">'; 
       echo '<a href="http://twitter.com/'.$user->twitter.'"><svg width="36" height="36">'; 
        echo '<image xlink:href="'.get_template_directory_uri().'/images/team-twitter.svg" src="'.get_template_directory_uri().'/images/team-twitter.png" width="36" height="36"/>'; 
       echo '</svg></a>'; 
       echo '</div> <!-- end team-twitter -->'; 
      echo '</div> <!-- end selection-member -->'; 
      echo '</div> <!-- end col-lg-4 -->'; 
     } 
     } 
    } 

    elseif (count($users) == '2' || '4') { 
     foreach ($users as $user) { 
     if ($user->displayname != '') { 
      echo '<div class="col-lg-4 col-lg-offset-1 col-md-6 col-sm-6">'; 
      echo '<div class="selection-member">'; 
       echo '<div class="individual-pic">'.get_avatar($user).'</div>'; 
       echo '<h4 class="selection-name">' .$user->displayname. '</h5>'; 
       echo '<h5 class="grey-tagline">'.$user->jobtitle.'</h5>'; 
       echo '<div class="selection-text quick-center">'; 
       echo '<p>' . $user->desc . '</p>'; 
       echo '</div> <!-- end selection-text -->'; 
       echo '<div class="team-twitter">'; 
       echo '<a href="http://twitter.com/'.$user->twitter.'"><svg width="36" height="36">'; 
        echo '<image xlink:href="'.get_template_directory_uri().'/images/team-twitter.svg" src="'.get_template_directory_uri().'/images/team-twitter.png" width="36" height="36"/>'; 
       echo '</svg></a>'; 
       echo '</div> <!-- end team-twitter -->'; 
      echo '</div> <!-- end selection-member -->'; 
      echo '</div> <!-- end col-lg-4 -->'; 
      echo '<div class="col-lg-1"></div>'; 
     } 
     } 
    } 
    ?> 

Спасибо!

Редактировать: Большое спасибо, ребята. Я новичок в PHP. Спасибо!

+0

любая причина, по которой вы используете тройной эквивалент? ===. двойного хватит, нет? –

+1

Справа. Заменить 'count ($ users) === '2' || '4'' с 'count ($ users) ==' 2 '|| count ($ users) == '4''. – tmh

+0

@JPLew полностью. Но никто не работает. –

ответ

3

count() массива всегда является целым числом.

Но вы сравнили его со строкой. И вы сделали это со строгим сравнением ===. Это просто не сработает.

if (count($array) == 2) действительно достаточно, чтобы действовать, когда счет равен двум.

Вторая проблема: Если вы хотите сравнить счетчик с двумя значениями, вам нужно либо написать ДВА сравнения, либо использовать другую конструкцию.

if (count($array) == 2 || count($array) == 4) если что-то должно произойти на двух или четырех.

if (in_array(count($array), array(2, 4))) - это более сложная версия, которая может быть расширена до стольких значений, которые вы хотите.

В качестве альтернативы вы можете использовать switch. http://de2.php.net/manual/en/control-structures.switch.php

+1

или 'if (count ($ users)% 2 === 0) ...' –

+0

Если может быть больше 4 значений, решение по модулю определенно более элегантно. Имея всего 4 значения, вероятно, более читаемо, чтобы поместить их в код буквально. – tmh

2

Есть две вещи неправильно с этим:

if (count($users) === '1' || '3') { 

Во-первых, вы сравниваете $users со строкой, содержащей 1 - это то, что означают одинарные кавычки. Поскольку вы используете ===, это также сравнивает типы, а это значит, что вы не получите соответствия.

Во-вторых, вторая часть инструкции if всегда будет соответствовать истине. Это эффективно:

if ('3') { 

Вы проверяете, является ли строковый литерал '3' истинным; documentation for type casting показывает, что PHP будет использовать для «false», а строка с любым значением, отличным от 0, будет равна true.

Вы должны написать, если заявление, как:

if (count($users) == 1 || count($users) == 3) { 
+0

условие 'OR' эффективно' if ('3') {' – crush

+0

@crush - я могу точно видеть, что вы говорите, но я не могу для жизни меня понять, как поместить его на английский язык. : D – andrewsi

1

Есть две проблемы с вашей, если заявления:

  1. Вы используете === оператор, который делает строгую проверку типов. '2' в кавычках - это строка, которая просто не является целым числом, поэтому вы не можете сравнить ее с результатом count, который является целым числом, по крайней мере, не ожидая полезных результатов. Строка никогда строго не равна целому числу. Это всегда будет стоить false, поэтому либо удалите котировки, либо используйте оператор ==.

  2. Вы пишете count... == '2' || '4', где правильный синтаксис: count... == '2' || count... == '4'. В первом случае вы в основном говорите: «count == '2' или '4' (или оба) должны быть true». Оператор '4' всегда оценивает true. Итак, у вас есть something || true, что также всегда оценивает true.