【问题标题】:php variable not returning what is expectedphp变量没有返回预期的内容
【发布时间】:2011-09-25 12:52:07
【问题描述】:

我有一个从数据库生成的无序列表。根据返回字段之一的值,应将 li 标记的类设置为不同的值。不幸的是,他们都返回“不活动”。我知道这一定很简单,但我已经盯着它看了好几个小时了,还是没看到。

代码如下:

<ul class="tabs">
   <? foreach ($tracks AS $track) {
    $active = (strtolower($track->shortname === 'dpp')) ? ' class="active"' : 'class="inactive"';
    echo "<p>".strtolower($track->shortname). " is ".$active."</p>"; ?>
    <li <?= $active; ?>><a href="#<?= strtolower($track->shortname); ?>"><?= $track->name; ?></a></li>
   <? } ?>
</ul>

以下是实际打印的内容:

<ul class="tabs"> 
    <p>dpp is class="inactive"</p>  <li class="inactive"><a href="#dpp">Digital Path to Purchase</a></li> 
    <p>cre is class="inactive"</p>  <li class="inactive"><a href="#cre">Fueling Creativity</a></li> 
</ul> 

很明显第一个是返回$track-shortname of dpp,那么为什么$active变量没有设置为“class=active”呢?

【问题讨论】:

  • 注意括号:strtolower($track-&gt;shortname === 'dpp') => strtolower($track-&gt;shortname) === 'dpp'

标签: php variables if-statement ternary-operator


【解决方案1】:

你的一个右括号放错地方了。

变化:

$active = (strtolower($track->shortname === 'dpp')) ? ' class="active"' : 'class="inactive"';

收件人:

$active = (strtolower($track->shortname) === 'dpp') ? ' class="active"' : 'class="inactive"';

如果括号放在错误的位置,$track-&gt;shortname 会在任何小写转换之前与 dpp 进行比较。然后将该比较的结果(布尔值)传递给strtolower。这导致strtolower 只返回一个字符串表示,这导致三元比较评估为假。

【讨论】:

  • 谢谢。与下面的 hakre 答案相同;一分钟前就看到了。
【解决方案2】:

您在检查短名称的表达式中出错:

$active = (strtolower($track->shortname === 'dpp')) ? ' class="active"' : 'class="inactive"';
                     ^                           ^

你肯定只想把它放在$track-&gt;shortname周围:

$active = (strtolower($track->shortname) === 'dpp') ? ' class="active"' : 'class="inactive"';
                     ^                 ^

否则,您尝试将布尔值小写,该值要么是真要么是假,但在你的情况下,它看起来总是假的,因此是非活动的 CSS 类。

顺便说一句,你可以再换一双:

$active = strtolower($track->shortname) === 'dpp' ? ' class="active"' : 'class="inactive"';
         ^                                       ^

【讨论】:

  • 谢谢;我做了一些复制/粘贴工作并且放错了右括号。我就知道会是这样!\
【解决方案3】:

代码(strtolower($track-&gt;shortname === 'dpp')) 看起来不对。你把strtolower放在比较周围,你可能只是想把它放在$track-&gt;shortname周围。

【讨论】:

    猜你喜欢
    • 2023-03-10
    • 2018-06-24
    • 1970-01-01
    • 2014-06-26
    • 1970-01-01
    • 2014-07-13
    • 2022-01-18
    • 2018-01-31
    • 1970-01-01
    相关资源
    最近更新 更多