奇怪的PHP“基本真/假声明”导致两种情况

时间:2018-04-21 10:27:05

标签: php if-statement

我对两种不同情况下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中,一切正常(第一个陈述是真的,第二个陈述是假的)。

感谢您的帮助!

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语句的有用简写。