我对两种不同情况下PHP代码中的基本true / false声明结果感到困惑。让我们假设strlen($ item [“description”])= 50 。如果描述超过20个字符,我想添加“...”。
案例1:
rails server -p 3050
案例2:
$art = strlen($item["description"]) > 20 ? $item["description"] : substr($item["description"], 0, 20) . "...";
echo $art;
我的问题是:为什么我要更改“<”案例1中的运算符为“>”,如果我想为大于20字符的desc添加“...”?在案例2中,一切正常(第一个陈述是真的,第二个陈述是假的)。
感谢您的帮助!
答案 0 :(得分:1)
这就像这样
$var = condition ? true returns : false returns
所以在你的case1中你有以下代码
$art = strlen($item["description"]) > 20 ? $item["description"] : substr($item["description"], 0, 20) . "...";
echo $art;
你在这段代码中说,如果它大于20,则返回你的文本,否则返回子串+“......”
而不是改变“<”或“>”改变这样的回报
$art = strlen($item["description"]) > 20 ? substr($item["description"], 0, 20) . "..." : $item["description"] ;
echo $art;
在第二种情况下
$cut = strlen($item["description"]) < 20 ? $item["description"] : substr($item["description"], 0, 20) . "...";
就像
if(strlen($item["description"]) < 20)
{
return $item["description"];
}
else
{
return substr($item["description"], 0, 20) . "...";
}
答案 1 :(得分:0)
您的代码读取(1),如果字符串大于20个字符,则使用elipsis回显字符串else echo the truncated string。
虽然逻辑应该读取类似的内容,如果字符串长度大于20个字符,则回显截断的版本,否则回显原样。
<?php
function truncate($str) {
return strlen($str) > 20
? substr($str, 0, 20) . "..."
: $str;
}
foreach(
[
'Who are you?',
'Sometimes it\'s harder to look than to leap.'
]
as
$text
)
echo truncate($text) , "\n";
输出:
Who are you?
Sometimes it's harde...
你的第二个案例读得很好,如果字符串小于20个字符,按字符串分配字符串,否则用elipsis截断它。
三元运算符是if,else语句的有用简写。