PHP-如果变量不为空,则输出一些HTML代码

51

如果一个变量不为空,我想显示一些HTML代码,否则我想什么也不显示。

我尝试过这段代码,但它没有起作用:

<?php 
    $web = the_field('website');
    if (isset($web)) {
?>
       <span class="field-label">Website: </span><a href="http://<?php the_field('website'); ?>" target="_blank"><?php the_field('website'); ?></a> 
<?php
    } else { 
        echo "Niente";
    }
?>

1
@Jack Maney - 我相信那是一个自动的WordPress函数,用于输出给定的字段名称。 - Morgon
9个回答

99
if (!empty($web)) {
?>
    <span class="field-label">Website:  </span><a href="http://<?php the_field('website'); ?>" target="_blank"><?php the_field('website'); ?></a> 
<?php
} else { echo "Niente";}

http://us.php.net/manual/zh/function.empty.php


3
在你的空函数调用之前应该加上一个!,因为这正是原帖作者所要寻找的。 - pbond

22

isset会返回true,即使变量是 ""。只有当一个变量是null时,isset才返回false。你应该这样做:

if (!empty($web)) {
    // foo
}

这将检查变量是否为空。

希望能对你有所帮助。


1
OP 应该使用简单明了的 if ($web)。这里不需要使用 empty,它只会不必要地隐藏错误。 - deceze
我不明白 if(!empty($var)) 怎么会让人困惑,但我同意 if ($var) 更简单。 - mishmash
3
因为 empty 的特定目的是为了抑制不存在变量的错误。除非有必要,否则您不希望抑制错误。《PHP isset 和 empty 的权威指南》详细解释了这个问题。 - deceze

14

只需使用if ($web)。如果变量具有任何真值,则它为true

由于您刚刚在上一行设置了它,因此不需要使用issetempty来检查变量是否存在。


3
这是最好的答案。似乎很少有人知道这一点。 - IXN

3

关注错误抑制部分,如果变量是一个数组,其中访问的可能已定义或未定义

  1. if($web['status']) 会产生:

    注意:未定义的索引:status

  2. 要访问该键而不触发错误:
    1. if(isset($web['status']) && $web['status']) (如果第一个条件为FALSE,则不测试第二个条件)或
    2. if(!empty($web['status']))

然而,正如deceze♦指出的那样,已定义变量的真值使得!empty多余,但您仍然需要记住PHP将以下示例视为FALSE

  • null(空)
  • ''""(空字符串)
  • 0.0(浮点型零)
  • 0(整型零)
  • '0'"0"(字符串零)
  • '0' + 0 + !3(字符串“030”)

因此,如果您想要检测到零这个有意义的状态,您应该使用字符串和数字比较:

  1. Error free and zero detection:

    if(isset($web['status'])){
      if($web['status'] === '0' || $web['status'] === 0 ||
         $web['status'] === 0.0 || $web['status']) {
        // not empty: use the value
      } else {
        // consider it as empty, since status may be FALSE, null or an empty string
      }
    }
    

    The generic condition ($web['status']) should be left at the end of the entire statement.


一个 [3v4l 的例子将转换的对象转化为数组,显示了 property_existsissetarray_key_existsempty] (https://3v4l.org/1hLkj)。这个例子证明了,`isset` 总是能检测到变量是否被赋予了非空值,而 array_key_exists 则总是能检测出键是否可访问。 - CPHPython
1
isset && !empty 是多余的。只使用 !empty 就可以达到同样的效果。 - deceze
2
@deceze 好久不见,你说得对:empty 确实似乎吸收/抑制了所有的通知/错误,避免了由于数组中不存在的键而引发“未定义的偏移量/索引”通知(即使在 PHP v4.4.9 中也是如此,我刚刚测试过 :))。我调整了答案,感谢你指出这一点! - CPHPython

1
你正在使用 isset,它的作用是检查变量是否被设置('存在')且不为 NULL。你要找的是 empty,它检查变量是否为空,即使它已经被设置了。要检查什么是空的和什么不是空的,请参考以下内容:

http://php.net/manual/en/function.empty.php

同时查看http://php.net/manual/zh/function.isset.php,了解isset的确切作用,这样你就能明白为什么它不能像你期望的那样工作。


如果您需要检查包含数字的变量,那么这是最好的方法。如参考所示,$e = 0; echo empty($e)也会返回false。无论我们以什么格式提供数字都没有关系。(字符串、浮点数、整数)请参见:https://www.php.net/manual/en/function.empty.php#refsect1-function.empty-returnvalues - Svenwas3f

0

我希望这也能起作用,尝试使用 "is_null"。

<?php 
$web = the_field('website');
if (!is_null($web)) {
?>

....html code here

<?php
} else { 
    echo "Niente";
}
?>

http://php.net/manual/en/function.is-null.php

希望适合你。


0

你的问题在于你使用了the_field(),这是一个WordPress插件Advanced Custom Fields中的函数。

如果你想要将一个字段赋值给一个变量,你需要使用这个函数:$web = get_field('website');


0
if($var !== '' && $var !== NULL)
{
   echo $var;
}

这个比deceze的答案不够优雅 - deceze的答案是页面上最专业的技术。 - mickmackusa
当变量的值为false且问题是检查变量是否为空时,deceze的技巧无效。 - dev verma
那么我想问题就在于你如何定义“空”。Deceze非常小心地解释了他的检查是“真实”的。如果OP明确期望一个布尔值false,那么这在问题中并不清楚。你没有解释清楚的答案并没有提到允许布尔值false - mickmackusa
我不用WordPress。the_field()会返回false,如果是这样,OP是否希望将其处理为非空结果?我认为不应该。 - mickmackusa

0
if(!empty($web))
{
   echo 'Something';
}

这个代码运行良好: <?php $web = get_field('website'); if (!empty($web)) { echo "<span class='field-label'>网站: </span><a href='http://<?php the_field('website'); ?> target='_blank'><?php the_field('website'); ?></a>";} else { echo "Niente";}?>但我看不到真正的链接,我只看到了这个输出: 网站: target='_blank'> - Luca Frank Guarini

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接