php判断字符串长度 isset()速度比strlen()更快
作者:admin 时间:2012-11-6 22:58:29 浏览:在php里当需要判断一个字符串长度时,我们首先想到的是strlen()函数,不错,strlen()返回的就是字符串的长度,这样使用没有任何问题。不过,如果要从php程序优化的角度来看,使用strlen()判断字符串长度未免是最好的写法。
程序的优化,需要经验的积累,那是知识的沉淀,厚积薄发的体现。
有经验的程序员发现,php判断字符串长度,使用isset()在速度上比strlen()更快,执行效率更高。
因此,今天就分析一下strlen()和isset()这两个函数。
PHP strlen() 函数
定义和用法
strlen() 函数返回字符串的长度。
语法
strlen(string)
参数:string
描述:必需。规定要检查的字符串。
实例
<?php
echo strlen("Hello world!");
?>
输出:
12
PHP isset() 函数
isset函数是检测变量是否设置。
格式:
bool isset ( mixed var [, mixed var [, ...]] )
返回值:
若变量不存在则返回 FALSE
若变量存在且其值为NULL,也返回 FALSE
若变量存在且值不为NULL,则返回 TURE
同时检查多个变量时,每个单项都符合上一条要求时才返回 TRUE,否则结果为 FALSE
如果已经使用 unset() 释放了一个变量之后,它将不再是 isset()。若使用 isset() 测试一个被设置成 NULL 的变量,将返回 FALSE。同时要注意的是一个 NULL 字节("")并不等同于 PHP 的 NULL 常数。
警告:
isset() 只能用于变量,因为传递任何其它参数都将造成解析错误。若想检测常量是否已设置,可使用defined() 函数。
实例:
<?php
$var = '';
if (isset($var)) {
print "This var is set set so I will print.";
}
// 在后边的例子中,我们将使用 var_dump函数 输出 isset() 的返回值。
$a = "test";
$b = "anothertest";
var_dump( isset($a) ); // TRUE
var_dump( isset ($a, $b) ); // TRUE
unset ($a);
var_dump( isset ($a) ); // FALSE
var_dump( isset ($a, $b) ); // FALSE
$foo = NULL;
var_dump( isset ($foo) ); // FALSE
?>
导读:var_dump()和print_r()在断点调试程序时的区别
isset()速度为什么比strlen()更快
strlen()函数函数执行起来相当快,因为它不做任何计算,只返回在zval 结构(C的内置数据结构,用于存储PHP变量)中存储的已知字符串长度。但是,由于strlen()是函数,多多少少会有些慢,因为函数调用会经过诸多步骤,如字母小写化(译注:指函数名小写化,PHP不区分函数名大小写)、哈希查找,会跟随被调用的函数一起执行。
在某些情况下,使用isset() 技巧可以加速执行你的代码。因为与isset()作为一种语言结构,意味着它的执行不需要函数查找和字母小写化。也就是说,实际上在检验字符串长度的顶层代码中你没有花太多开销。
举例如下:
if (strlen($foo) < 5) { echo "Foo is too short"$$ }
if (!isset($foo{5})) { echo "Foo is too short"$$ }
调用isset()比strlen()快。
导读: php isset和empty、==(等)和===(恒等)的区别
知识扩展
PHP String 函数
String 字符串函数允许您对字符串进行操作。
String 函数是 PHP 核心的组成部分。无需安装即可使用这些函数。
函数 | 描述 | PHP版本 |
---|---|---|
addcslashes() | 在指定的字符前添加反斜杠。 | 4 |
addslashes() | 在指定的预定义字符前添加反斜杠。 | 3 |
bin2hex() | 把 ASCII 字符的字符串转换为十六进制值。 | 3 |
chop() | rtrim() 的别名。 | 3 |
chr() | 从指定的 ASCII 值返回字符。 | 3 |
chunk_split() | 把字符串分割为一连串更小的部分。 | 3 |
convert_cyr_string() | 把字符由一种 Cyrillic 字符转换成另一种。 | 3 |
convert_uudecode() | 对 uuencode 编码的字符串进行解码。 | 5 |
convert_uuencode() | 使用 uuencode 算法对字符串进行编码。 | 5 |
count_chars() | 返回字符串所用字符的信息。 | 4 |
crc32() | 计算一个字符串的 32-bit CRC。 | 4 |
crypt() | 单向的字符串加密法 (hashing)。 | 3 |
echo() | 输出字符串。 | 3 |
explode() | 把字符串打散为数组。 | 3 |
fprintf() | 把格式化的字符串写到指定的输出流。 | 5 |
get_html_translation_table() | 返回翻译表。 | 4 |
hebrev() | 把希伯来文本从右至左的流转换为左至右的流。 | 3 |
hebrevc() | 同上,同时把(\n) 转为 <br />。 | 3 |
html_entity_decode() | 把 HTML 实体转换为字符。 | 4 |
htmlentities() | 把字符转换为 HTML 实体。 | 3 |
htmlspecialchars_decode() | 把一些预定义的 HTML 实体转换为字符。 | 5 |
htmlspecialchars() | 把一些预定义的字符转换为 HTML 实体。 | 3 |
implode() | 把数组元素组合为一个字符串。 | 3 |
join() | implode() 的别名。 | 3 |
levenshtein() | 返回两个字符串之间的 Levenshtein 距离。 | 3 |
localeconv() | 返回包含本地数字及货币信息格式的数组。 | 4 |
ltrim() | 从字符串左侧删除空格或其他预定义字符。 | 3 |
md5() | 计算字符串的 MD5 散列。 | 3 |
md5_file() | 计算文件的 MD5 散列。 | 4 |
metaphone() | 计算字符串的 metaphone 键。 | 4 |
money_format() | 把字符串格式化为货币字符串。 | 4 |
nl_langinfo() | 返回指定的本地信息。 | 4 |
nl2br() | 在字符串中的每个新行之前插入 HTML 换行符。 | 3 |
number_format() | 通过千位分组来格式化数字。 | 3 |
ord() | 返回字符串第一个字符的 ASCII 值。 | 3 |
parse_str() | 把查询字符串解析到变量中。 | 3 |
print() | 输出一个或多个字符串。 | 3 |
printf() | 输出格式化的字符串。 | 3 |
quoted_printable_decode() | 解码 quoted-printable 字符串。 | 3 |
quotemeta() | 在字符串中某些预定义的字符前添加反斜杠。 | 3 |
rtrim() | 从字符串的末端开始删除空白字符或其他预定义字符。 | 3 |
setlocale() | 设置地区信息(地域信息)。 | 3 |
sha1() | 计算字符串的 SHA-1 散列。 | 4 |
sha1_file() | 计算文件的 SHA-1 散列。 | 4 |
similar_text() | 计算两个字符串的匹配字符的数目。 | 3 |
soundex() | 计算字符串的 soundex 键。 | 3 |
sprintf() | 把格式化的字符串写写入一个变量中。 | 3 |
sscanf() | 根据指定的格式解析来自一个字符串的输入。 | 4 |
str_ireplace() | 替换字符串中的一些字符。(对大小写不敏感) | 5 |
str_pad() | 把字符串填充为新的长度。 | 4 |
str_repeat() | 把字符串重复指定的次数。 | 4 |
str_replace() | 替换字符串中的一些字符。(对大小写敏感) | 3 |
str_rot13() | 对字符串执行 ROT13 编码。 | 4 |
str_shuffle() | 随机地打乱字符串中的所有字符。 | 4 |
str_split() | 把字符串分割到数组中。 | 5 |
str_word_count() | 计算字符串中的单词数。 | 4 |
strcasecmp() | 比较两个字符串。(对大小写不敏感) | 3 |
strchr() | 搜索字符串在另一字符串中的第一次出现。strstr() 的别名 | 3 |
strcmp() | 比较两个字符串。(对大小写敏感) | 3 |
strcoll() | 比较两个字符串(根据本地设置)。 | 4 |
strcspn() | 返回在找到任何指定的字符之前,在字符串查找的字符数。 | 3 |
strip_tags() | 剥去 HTML、XML 以及 PHP 的标签。 | 3 |
stripcslashes() | 删除由 addcslashes() 函数添加的反斜杠。 | 4 |
stripslashes() | 删除由 addslashes() 函数添加的反斜杠。 | 3 |
stripos() | 返回字符串在另一字符串中第一次出现的位置(大小写不敏感) | 5 |
stristr() | 查找字符串在另一字符串中第一次出现的位置(大小写不敏感) | 3 |
strlen() | 返回字符串的长度。 | 3 |
strnatcasecmp() | 使用一种“自然”算法来比较两个字符串(对大小写不敏感) | 4 |
strnatcmp() | 使用一种“自然”算法来比较两个字符串(对大小写敏感) | 4 |
strncasecmp() | 前 n 个字符的字符串比较(对大小写不敏感)。 | 4 |
strncmp() | 前 n 个字符的字符串比较(对大小写敏感)。 | 4 |
strpbrk() | 在字符串中搜索指定字符中的任意一个。 | 5 |
strpos() | 返回字符串在另一字符串中首次出现的位置(对大小写敏感) | 3 |
strrchr() | 查找字符串在另一个字符串中最后一次出现的位置。 | 3 |
strrev() | 反转字符串。 | 3 |
strripos() | 查找字符串在另一字符串中最后出现的位置(对大小写不敏感) | 5 |
strrpos() | 查找字符串在另一字符串中最后出现的位置(对大小写敏感) | 3 |
strspn() | 返回在字符串中包含的特定字符的数目。 | 3 |
strstr() | 搜索字符串在另一字符串中的首次出现(对大小写敏感) | 3 |
strtok() | 把字符串分割为更小的字符串。 | 3 |
strtolower() | 把字符串转换为小写。 | 3 |
strtoupper() | 把字符串转换为大写。 | 3 |
strtr() | 转换字符串中特定的字符。 | 3 |
substr() | 返回字符串的一部分。 | 3 |
substr_compare() | 从指定的开始长度比较两个字符串。 | 5 |
substr_count() | 计算子串在字符串中出现的次数。 | 4 |
substr_replace() | 把字符串的一部分替换为另一个字符串。 | 4 |
trim() | 从字符串的两端删除空白字符和其他预定义字符。 | 3 |
ucfirst() | 把字符串中的首字符转换为大写。 | 3 |
ucwords() | 把字符串中每个单词的首字符转换为大写。 | 3 |
vfprintf() | 把格式化的字符串写到指定的输出流。 | 5 |
vprintf() | 输出格式化的字符串。 | 4 |
vsprintf() | 把格式化字符串写入变量中。 | 4 |
wordwrap() | 按照指定长度对字符串进行折行处理。 | 4 |
标签: 优化
- 站长推荐