PHP - mb_strlen的问题

时间:2011-03-12 12:04:18

标签: php string

如果字符串lenght大于30,我想将“值”推入“数组”。所以我已经完成了这个PHP脚本:

if(!mb_strlen($string, 'utf-8')<=30) array_push($array, "value");

但是,如果字符串小于31,它也会推送该值...为什么?

5 个答案:

答案 0 :(得分:7)

这样做的原因是PHP处理运营商的顺序。

它首先处理!mb_strlen($string, 'utf-8'),所以如果长度为非零,则返回true。

然后评估true <= 30,这总是正确的......

所以基本上唯一的例子是你的陈述是假的,如果给出一个零长度的字符串......

请参阅其他答案,了解如何编写声明。

答案 1 :(得分:4)

为什么不在编写代码时编写代码呢?

mb_strlen($string, 'utf-8') > 30

您的病情失败的原因是!的{​​{3}}比<=!mb_strlen($string, 'utf-8')。因此30在与(!mb_strlen($string, 'utf-8')) <= 30 进行比较之前进行评估,即:

0

由于除true之外的任何数字在operator precedence时评估为!mb_strlen($string, 'utf-8'),因此对于空字符串,表达式true仅为<=。并且由于!mb_strlen($string, 'utf-8')要求第一个操作数为数字,(int)true === 1的布尔结果为converted to boolean,其中(int)false === 0和{{1}}两者都小于或等于到30岁。

答案 2 :(得分:1)

为什么不使用更简单的条件?

if (mb_strlen($string, 'utf-8') > 30) array_push($array, "value");

答案 3 :(得分:1)

你的操作错误<= 30小于或等于30,那就少于31,你应该使用。

要纠正错误,你应该使用>运算符来证明左参数应该大于正确的论证。

如果你仔细观察炭的设计,你会看到>的左侧比右侧更大。 (反之亦然)

以下链接将描述差异:

您还会注意到if语句中有一个感叹号,导致php在实际触发长度检查之前将结果转换为bool。

因此,您将始终尝试并评估true <= 30,您应该删除感叹号。

尝试重写你的代码:

if(mb_strlen($string, 'utf-8') > 30)
{
     array_push($array, "value")
}

答案 4 :(得分:1)

您需要将测试括在括号中:

if(!(mb_strlen($string, 'utf-8')<=30)) array_push($array, "value");