0

配列を受け取り、配列の数に応じて特定のコードを吐き出す単純な PHP 関数を作成しようとしています。私のテスト ケースでは、2 人のユーザーのうち、最初のユーザーがif発生し、2 番目のユーザーが発生するはずでした。

以下はコードです:

問題は次の点にあると思います。

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が初めてです。ありがとうございました!

4

3 に答える 3

3

配列のcount()は常に整数です。

しかし、あなたはそれを文字列と比較しました。そして、あなたは厳密な比較でそうしました===。これは単に機能しません。

if (count($array) == 2)カウントが 2 の場合は、実際に行動するのに十分です。

2 番目の問題: カウントを 2 つの値と比較する場合は、2 つの比較を記述するか、別の構成を使用する必要があります。

if (count($array) == 2 || count($array) == 4)2つまたは4つで何かが起こった場合。

if (in_array(count($array), array(2, 4)))はより複雑なバージョンで、必要な数の値に拡張できます。

または、 を使用することもできますswitchhttp://de2.php.net/manual/en/control-structures.switch.php

于 2013-09-12T19:28:43.107 に答える
2

これには 2 つの問題があります。

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

$usersまず、次を含む文字列と比較しています1。これが一重引用符の意味です。を使用しているため===、タイプも比較されます。つまり、一致することはありません。

次に、ifステートメントの 2 番目の部分は常に true に解決されます。それは効果的です:

if ('3') {

文字列リテラル '3' が true かどうかを確認しています。型キャストのドキュメントには、PHP が「false」にキャストするものと、0 以外の値を持つ文字列が true になることが示されています。

if ステートメントを次のように記述する必要があります。

if (count($users) == 1 || count($users) == 3) {
于 2013-09-12T19:30:52.243 に答える
1

if ステートメントには 2 つの問題があります。

  1. ===厳密な型チェックを行う演算子を使用します。'2'in quotes は文字列であり、これは単に整数ではないため、count少なくとも有用な結果が期待される場合は、整数である の結果と比較することはできません。文字列が厳密に整数と等しくなることはありません。これは常に に評価されるfalseため、引用符を削除するか、==演算子を使用してください。

  2. count... == '2' || '4'正しい構文がどこにあるかを書きますcount... == '2' || count... == '4'。最初のケースでは、基本的に「どちらかcount == '2'または'4'(または両方) でなければならないtrue」と言います。ステートメント'4'は常に に評価されtrueます。これsomething || trueも常に と評価されtrueます。

于 2013-09-12T19:36:19.223 に答える