使用多种条件的奇怪行为php

时间:2015-11-12 15:13:31

标签: php

示例一(不起作用):

<?php
$classes = get_body_class();
if (!in_array('some-class',$classes) || $secondCondition === false) { ?>
     <div> Some Content </div>
<?php } ?>

示例二(工作???)

<?php
$classes = get_body_class();
if (!in_array('some-class',$classes)) { ?>
     <?php if ($secondCondition === false) { ?>
          <div> Some Content </div>
     <?php } ?>
<?php } ?>

不确定为什么第一个代码不起作用,即使满足条件!in_array$secondCondition === false,但是当我将一个条件包装在另一个条件中时它是否有效?

*请注意$secondCondition是先前定义的,所以我没有把这部分代码放在一起,因为它工作正常。

3 个答案:

答案 0 :(得分:1)

如果我说得对,你想展示一些内容,如果某类不在数组中$classes$secondConditionfalse

您的问题是您的两个示例处理不同的条件,如果您使用OR运算符|| 只有一个必须为true

所以我猜您正在寻找AND运算符&&

请改为尝试:

<?php
$classes = get_body_class();
if (!in_array('some-class',$classes) && $secondCondition === false) : ?>
  <div> Some Content </div>
<?php endif; ?>

使用代码的工作示例。我初始化变量$classes$secondCondition进行测试,稍微玩一下并查看差异

工作示例:

$classes = array( "other-class" );
$secondCondition = false;


if ( !in_array( 'some-class', $classes ) && $secondCondition === false ) : ?>
    <div> Some Content A</div>
<?php endif;
// in this condition only one has to be true either it is not in array or $secondCondition = false
if ( !in_array( 'some-class', $classes ) || $secondCondition === false ) : ?>
    <div> Some Content B</div>
<?php endif;
// in this example BOTH conditions have to be true, first: not in array, second: $secondCondition = false
if ( !in_array( 'some-class', $classes ) ) {
    if ( $secondCondition === false ) { ?>
        <div> Some Content C</div>
    <?php }
}

答案 1 :(得分:0)

你的两个代码不相同。 第二个检查您的值是否在数组中,然后检查$secondCondition是否为false。

如果两个条件均为真,则会打印<div>

因此,此条件的等效代码不是

(!in_array('some-class',$classes) || $secondCondition === false)

(!in_array('some-class',$classes) && $secondCondition === false)

答案 2 :(得分:0)

您应该使用更多的括号和更少的标签

<?php
  $classes = get_body_class();
  if ((!in_array('some-class',$classes)) || ($secondCondition === false)) {
    echo "<div> Some Content </div>";
  }
?>