我需要计算这样一个textarea值的数量。 textarea可能包含5000个字符。但我只需要知道这些字符的数量是否超过20个字符。我可以使用strlen()
函数来做到这一点。像这样:
$content = $_POST['textarea_content'];
$content_length = mb_strlen($content, 'utf8');
if ( $content_length > 20 ) {
// do stuff
}
但我的方法根本没有优化。它计算所有字符的数量,然后进行比较。正如我所说,有时会有很多像5000个字符的字符。那么有没有办法在20个字符后打破计数?
答案 0 :(得分:1)
PHP中的字符串有一个内部变量,可以保存字符串的长度,因此strlen($str)
的运行时间根本不取决于字符串的长度。
您的问题是您想使用mb_strlen
来获取字符串中的字符数(而不是字节数)。换句话说 - 即使字符串包含Unicode字符,您也想知道字符串的长度。
如果您知道您的字符串是UTF-8,则可以将其用于优化。 UTF-8每个字符最多可以保存4个字节,所以如果你使用isset($str[80])
- 你肯定知道你的字符串是至少20个字符(可能还有更多)。如果没有,您仍然需要使用mb_
函数来获取所需的信息。
使用isset
代替strlen
的原因是因为您询问了优化方式。您可以在this question中阅读有关这两者的更多信息。
总结一下 - 您的优化代码可能是:
if (isset($str[80]) || mb_strlen(mb_substr($str, 0, 21, 'utf-8'), 'utf-8') > 20) {
....
}
在php中,代码将首先检查isset
部分,如果它返回true,则其他部分将不会运行(因此您可以从isset
和事实中获得优化不需要运行mb_
功能。
如果您有关于字符串中字符的更多信息,可以使用它进行更多优化(例如,如果您知道字符串中的所有字符都来自
UTF-8
的较低范围,您不必使用$str[80]
,您也可以使用$str[40]
。
您可以使用wikipedia中的此表:
与utf8-chartable website的信息一起:
为了帮助优化字符串中每个字符可能需要的字节数。