当我们要操作字符串中的某一个单字节时,我们该使用什么样的方式操作?一直以为,substr函数不会很慢。但今天测试了一下,结果并非如此。以下是测试代码:
<?php
$str='abcdefghijklmnopqrstuvwxyz1234567890';
error_reporting(E_ALL);
/**
* Simple function to replicate PHP 5 behaviour
*/
function microtime_float()
{
list($usec, $sec) = explode(" ", microtime());
return ((float)$usec + (float)$sec);
}
//使用substr函数
$start=microtime_float();
for ($k = 100; $k > 0; $k--) {
for ($i=0;$i<strlen($str);$i++)
echo substr($str,$i,1), ' ';
}
$end = microtime_float();
echo("<br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/> t i m e :" . round( $end - $start ,6) ."<br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>");
//使用字节操作
$start=microtime_float();
for ($k = 100; $k > 0; $k--) {
for ($i=0;$i<strlen($str);$i++)
echo $str{$i}, ' ';
}
$end = microtime_float();
echo("<br/> <br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>t i m e :" . round( $end - $start ,6) ."<br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>");
//使用数组模式操作
$start=microtime_float();
for ($k = 100; $k > 0; $k--) {
for ($i=0;$i<strlen($str);$i++)
echo $str[$i], ' ';
}
$end = microtime_float();
echo("<br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/> t i m e :" . round( $end - $start ,6) ."<br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>");
?>
以下是测试结果:
t i m e :0.003782
t i m e :0.002862
t i m e :0.002587
t i m e :0.00351
t i m e :0.002649
t i m e :0.002786
由此可见,substr速度是很慢的。而字节操作与数组操作模式,则是同一级别的。由此我们认为,如果对字符串进行字节操作,则使用字节操作模式最好,因为,这一方式不会导致误以为变量类型是数组。
当然,这种操作方式有其局限性,那就是对于中文字串是无法这样处理的,你只有使用mb_substr!!
分享到:
相关推荐
通过这种方式,我们能够克服Impala原生`substr()`函数在处理中文字符串时的局限性,实现更精确且无乱码的字符串截取操作。这种方法不仅适用于中文字符,还可以扩展到其他多字节字符集,如日文或韩文等。同时,这也是...
substr 函数取得部份字符串,以便于字符串处理操作。 49. trim: 截去字符串首尾的空格 trim 函数截去字符串首尾的空格,以便于字符串处理操作。 50. ucfirst: 将字符串第一个字符改大写 ucfirst 函数将字符串第...
string :需要进行正则处理的字符串 pattern :进行匹配的正则表达式 position :起始位置,从第几个字符开始正则表达式匹配(默认为1) occurrence :标识第几个匹配组,默认为1 modifier :模式(‘i’不区分大...
字符串是由字符组成的序列,而“字符串按照指定的字节数来截取”这个话题,就是指如何在字符串中提取固定字节数的部分。在不同的编程语言中,都有相应的函数或方法来实现这一功能。 在Python中,可以使用内置的`...
除非你知道字符串是单字节编码(如ASCII),否则应避免直接使用`substr()`处理中文字符串。 在实际开发中,考虑到性能和兼容性,推荐使用`mb_substr()`函数来处理中文字符串的截取。同时,为了确保代码的健壮性,...
3. **使用`mb_substr()`处理多字节字符:**当处理包含多字节字符(如UTF-8编码的中文字符)的字符串时,`substr()`可能无法正确处理。这时,可以使用`mb_substr()`函数,它能够识别多字节字符并正确截取。例如: ``...
字符串处理是PHP中的核心功能之一,PHP提供了丰富的内置函数来处理字符串,如`substr()`、`strstr()`、`strpos()`等。然而,在某些复杂场景下,这些基础函数可能无法满足需求,例如需要截取两个标记之间的内容,或者...
类似于 `substr()`,`mb_strimwidth()` 在多字节字符集下工作,但还可以根据指定的宽度和终止字符串来截取并修剪字符串。 在实际应用中,我们可能还需要考虑字符串的编码、字符集以及截取规则(如是否包含结束标记...
在PHP编程语言中,计算字符串长度是一个常见的任务,特别是在处理用户输入、文本...结合其他字符串函数,我们可以完成各种字符串操作和验证。对于`str.php`文件,可以期望找到与这些知识点相关的代码示例或实用工具。
本资料主要聚焦于字符串的合并与截取,这些都是字符串基本操作的核心部分。 首先,我们要理解在C++中如何表示字符串。C++标准库提供了`std::string`类来处理字符串,这是一个非常方便的工具,它提供了丰富的成员...
### PHP字符串处理详解 #### 一、引言 在PHP编程中,字符串处理是一项非常重要的技能。无论是构建网页内容、处理用户输入还是与其他系统交互,掌握...希望本文能帮助读者更好地理解和应用这些强大的字符串处理技术。
字符串查找是处理字符串时非常重要的操作之一。 ##### `strpos` **功能描述:** 查找字符串首次出现的位置。 **示例代码:** ```php $row = ['housetitle' => '100%淿源']; if (strpos($row['housetitle'], '100%...
最后,提供的压缩包文件"CString.php"可能包含了作者自定义的字符串操作类或函数,可以下载并学习,以便更好地理解PHP中字符串操作的实现方式和扩展可能性。通过学习和研究这些自定义工具,你可以加深对PHP字符串...
为了方便开发者高效地操作字符串,PHP提供了一个内置的字符串类,这个类包含了许多实用的方法,能够帮助我们进行各种字符串操作。在这个"php的字符串类.zip"压缩包中,我们可以找到一个自定义的字符串类,它可能包含...
- 字符串可以使用单引号或双引号创建,两者效果相同。 3. **字符串属性** - `length`:返回字符串的长度,例如`str.length`。 4. **字符串操作** - 连接:`+`运算符可以连接两个字符串。 - 拼接:`str.concat...
### Oracle中操作字符串 在Oracle数据库中,对字符串进行处理是一项常见的需求,特别是在处理带有特定分隔符(如逗号`,`、冒号`:`等)的字符串时。本文将详细介绍如何利用Oracle内置函数来实现从含有逗号和冒号的...
本文将详细介绍JavaScript中的字符串操作方法,帮助开发者更好地理解和运用这些功能。 #### 基础概念与创建方式 1. **创建字符串**: - 使用单引号(`'`)或双引号(`"`)来创建一个字符串,例如:`var str = "Hello,...
本篇文章将深入探讨如何在PHP中获取字符串中的特定字符,这是一项基础但至关重要的技能,对于处理用户输入、数据处理和文本操作至关重要。 首先,我们需要了解字符串的基本概念。在PHP中,字符串是由一个或多个字符...
在Java编程语言中,处理带有汉字的字符串时,由于汉字占据多个字节,按照字节进行截取可能会导致汉字被不完整地分割,从而产生乱码。为了解决这个问题,我们需要理解Unicode编码以及如何在Java中正确处理多字节字符...