我使用PHP进行编程,如果'使用'简写。将一些HTML代码回显到页面上,但它表现得很奇怪。
echo '<div id="filter_bar">
<ul>';
echo '<li><a href="?select=trending"' . ($_GET['select'] == "trending") ? ' class="filter_selected">Trending</a></li>' : '>Trending</a></li>';
echo '<li><a href="?select=most_picked"' . ($_GET['select'] == "most_picked") ? ' class="filter_selected">Most Picked</a></li>' : '>Most Picked</a></li>';
echo '<li><a href="?select=newest"' . ($_GET['select'] == "newest" || empty($_GET['select'])) ? ' class="filter_selected">Newest</a></li>' : '>Newest</a></li>';
echo '</ul></div>';
我得到的结果代码就是这个
class="filter_selected">Trending</a></li> class="filter_selected">Most Picked</a></li> class="filter_selected">Newest</a></li>
正如您所看到的,开场列表标签没有显示......但是如果我替换了第一个句号,它们就会显示出来。&#39;在每一行都有&#39;,&#39;逗号。
所以这有效,用逗号
我应该在这里使用逗号吗?到处都是在线,以显示一段时间&#39;
答案 0 :(得分:3)
原因是:
echo '<li>' . true ? 'aaa' : 'bbb';
会为您提供 aaa ,
因为它与'<li>1' ? 'aaa' : 'bbb'
你应该这样做:
echo '<li>' . (true ? 'aaa' : 'bbb');
答案 1 :(得分:2)
也许你可以让你的生活更轻松:
echo '<div id="filter_bar"><ul>',
'<li><a href="?select=trending"', $_GET['select'] == "trending" ? ' class="filter_selected">' : '>', 'Trending</a></li>',
'<li><a href="?select=most_picked"', $_GET['select'] == "most_picked" ? ' class="filter_selected">' : '>', 'Most Picked</a></li>',
'<li><a href="?select=newest"', ($_GET['select'] == "newest") || empty($_GET['select']) ? ' class="filter_selected">' : '>', 'Newest</a></li>',
'</ul></div>';
哪个会使用逗号(不需要重复回复那么多),如果你只想插入class属性,则不需要重复那么多的字符串。
然后你在不需要它们的地方使用了括号(参见Operator Precedence Docs)但是在需要它们的地方,你没有使用它们(最后一种情况)。
此外,最好先将这些值填充到变量中,这样就可以更轻松地调试内容(并且不要将$_GET
与输出混合,以防止输出逻辑与输入变量混合)。
这样你就可以了解到你的问题不在echo
范围内,而只是你用三元运算符制定的表达式。
$class_trending = $_GET['select'] == "trending" ? ' class="filter_selected"' : '';
$class_most_picked = $_GET['select'] == "most_picked" ? ' class="filter_selected"' : '';
$class_newest = ($_GET['select'] == "newest") || empty($_GET['select']) ? ' class="filter_selected"' : '';
echo '<div id="filter_bar"><ul>',
'<li><a href="?select=trending"', $class_trending, '>Trending</a></li>',
'<li><a href="?select=most_picked"', $class_most_picked, '>Most Picked</a></li>',
'<li><a href="?select=newest"',$class_newest , '>Newest</a></li>',
'</ul></div>';
答案 2 :(得分:1)
不知道你的问题,但这段代码对我来说看起来很难看。 我会这样做:
在PHP代码中我首先准备变量。
$sections = array(
'newest' => 'Newest',
'trending' => 'Trending',
'most_picked' => 'Most Picked',
);
if (empty($_GET['select']) OR !$choice = array_search($sections,$_GET['select'])) {
$choice = 'newest';
}
然后在模板中运行平滑和短循环:
<div id="filter_bar">
<ul>
<? foreach ($sections as $sect => $name): ?>
<li>
<a href="?select=<?=$sect?><? if ($choice == $sect) ?>" class="filter_selected"<? endif ?>><?=$name?></a>
</li>
<? endforeach ?>
</ul>
</div>
答案 3 :(得分:0)
一种可能的解决方案是
echo "<li><a href='?select=newest'";
echo ($_GET['select'] == "newest" || empty($_GET['select'])) ? ' class="filter_selected">Newest</a></li>' : '>Newest</a></li>';
答案 4 :(得分:0)
将括号更改为以下内容:
echo '<div id="filter_bar">
<ul>';
echo '<li><a href="?select=trending"' . ($_GET['select'] == "trending" ? ' class="filter_selected">Trending</a></li>' : '>Trending</a></li>');
echo '<li><a href="?select=most_picked"' . ($_GET['select'] == "most_picked" ? ' class="filter_selected">Most Picked</a></li>' : '>Most Picked</a></li>');
echo '<li><a href="?select=newest"' . (($_GET['select'] == "newest" || empty($_GET['select'])) ? ' class="filter_selected">Newest</a></li>' : '>Newest</a></li>');
echo '</ul></div>';
如果你不这样做,PHP不知道你的情况到底是什么。另请查看operator precendence,因为这解释了为什么它使用逗号。
顺便说一句:?:被称为ternary operator。