2017-08-16 5 views
1

大きなコードを書き込む以外に多くの検索ができませんでした。 私が必要とするのは、2つの$ btn_文字列のいずれかが設定されている場合にのみ出力されることです。 $btn_orange = get_field('btn_orange')が真equeals場合get_field('btn_black')が良好な値を返しながら、 ($btn_black = get_field('btn_black')が処理されていない現状でORで2番目の条件を処理していないPHP

$btn_orangeの場合、$btn_blackは設定されていません。

これは私の現在のコードです:

<?php if(($btn_orange = get_field('btn_orange')) || ($btn_black = get_field('btn_black'))): ?> 

     <div class="buttons"> 

     <?php if($btn_orange && ($btn_orange_url = get_field('btn_orange_url'))): ?> 

      <a class="btn btn-lg btn-primary" href="<?php echo $btn_orange_url; ?>"><?php echo $btn_orange; ?></a> 

     <?php elseif($btn_orange): ?> 

      <span class="btn btn-lg btn-primary"><?php echo $btn_orange; ?></span> 

     <?php endif;?> 

     <?php if($btn_black && ($btn_black_url = get_field('btn_black_url'))): ?> 

      <a class="btn btn-lg btn-black" href="<?php echo $btn_black_url; ?>"><?php echo $btn_black; ?></a> 

     <?php elseif($btn_black): ?> 

      <span class="btn btn-lg btn-black"><?php echo $btn_black; ?></span> 

     <?php endif;?> 

    </div> 

<?php endif; ?> 

ブロックならば今、私は別々にbtn_orange$btn_blackを分離することができます。 しかし、どちらか一方または両方にget_field()の値が設定されている場合は、<div class="buttons">が出力される必要があります。

私はこれを最初のif文で実行できますか?

編集:問題を解決しました。私は$x = func($parameter)のようなものをIFの文に入れてはいけませんが、最初にdougtesting.netが指摘したように文字列を最初に埋め込みます。条件の

+0

によって応答を再確認することができます

<?php $btn_orange = get_field('btn_orange'); $btn_black = get_field('btn_black'); if ($btn_orange || $btn_black): ?> <div class="buttons"> <?php if (isset ($btn_orange) && ($btn_orange_url = get_field('btn_orange_url'))): ?> 

状態に挿入する前に割り当て変数でこれを試すことができます(非厳密な比較演算子)、そうですか? – GordonM

答えて

1

$ btn_blackは、$ btn_orangeがtrueのときに、PHPが最初の部分が真であるためにIF文の残りの部分を評価するのを止めるので、get_field( 'btn_black')の値を入力しません。

最善の解決策は、

$btn_orange = get_field('btn_orange'); 
$btn_black = get_field('btn_black'); 

if($btn_orange || $btn_black) { 
    etc... 
} 

はその後、両方の変数は、if文の中で使用することができます...このようなIF文の前に変数を移入することです。

+0

これはトリックでした!私は文字列を事前に設定する前に私が使用できなかった理由を説明できますか?私がそれをした理由は、「短い」コードを書くことでした。私は '$ x = func( 'string')'をifの中に書くことは 'if'の内部に実行を移すだけだと確信しました。確かに – odiw

+0

です。ええ、私は短いコードを書こうとしています。その理由は、OR(||)条件付きのIFステートメントでは、そのうちの1つだけが条件を満たすためにTRUEである必要があり、ifステートメント内のコードに移動する必要があるからです。 $ btn_orangeがtrueの場合、$ btn_blackに宣言して値を代入するコードは決して実行されませんでした。 –

+0

PHPの&&、||、and、and、or演算子は "短絡"演算子として実装されています。条件が全体として条件付きで強制的に実行される条件が見つかるとすぐに、後続条件の評価が停止します。 –

1

は、あなたがあなたのif文の代わりに==

+0

これは文全体を破りました – odiw

+0

@odiwどちらが意味するのですか – Jens

+0

@Jens OPはそれらの変数に値を割り当て、その変数が条件内で偽であるかどうかを確認したいと思います。 – apokryfos

1

==を使用する必要がありますチェック。条件はそれを行うためのものではありません(これが、他のほとんどのプログラミング言語が明示的にそれを禁じている理由です)。

この操作を行います。それを満たすことを満たすかどうかには、no可能な方法はありません場合

<?php $btn_orange = get_field('btn_orange'); 
     $btn_black = get_field('btn_black'); 
     if ($btn_orange || $btn_black): 
?> 

PHP(および他のほとんどのプログラミング言語は)条件評価を放棄します。計算時間とリソースを無駄にするのは無駄です。両方の条件がインデックスが、それはエラーをスローしますアクセスし、次に設定されていない場合ので、評価されるようにした場合には、このコードが壊れる

if (isset($array["index"])) && $array["index"] == "something) 

また、次のコードを検討してください。

+0

はい、' == 'を使うと' FALSE'になります – odiw

1

それは、条件内の値を代入するのは良い考えではありませんと確認するために、単一の=を使用している代わりに=

if(($btn_orange == get_field('btn_orange')) || ($btn_black == get_field('btn_black') 
+0

申し訳ありません、あなたの前にdougtesting.netの答えが見えました。あなたの答えは同じように良いです:) – odiw

0

あなたはまた、あなたは=(代入演算子)を使用して、代わりに==している認識しているvar_dump();

関連する問題