`
bardo
  • 浏览: 378208 次
  • 性别: Icon_minigender_1
  • 来自: 上海
博客专栏
D1407912-ab64-3e76-ae37-b31aa4afa398
浅述PHP设计模式
浏览量:11805
9d6df9f7-91da-3787-a37c-0e826525dd5d
Zend Framewor...
浏览量:10112
85b628bd-a2ed-3de2-a4b1-0d34985ae8b6
PHP的IDE(集成开发环...
浏览量:9499
社区版块
存档分类
最新评论

PHP字符串单字节操作——substr真的好慢

    博客分类:
  • PHP
PHP 
阅读更多

当我们要操作字符串中的某一个单字节时,我们该使用什么样的方式操作?一直以为,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!!

0
3
分享到:
评论

相关推荐

    impala中substr()截取中文字符串乱码的问题

    通过这种方式,我们能够克服Impala原生`substr()`函数在处理中文字符串时的局限性,实现更精确且无乱码的字符串截取操作。这种方法不仅适用于中文字符,还可以扩展到其他多字节字符集,如日文或韩文等。同时,这也是...

    php字符串操作全实例心得

    substr 函数取得部份字符串,以便于字符串处理操作。 49. trim: 截去字符串首尾的空格 trim 函数截去字符串首尾的空格,以便于字符串处理操作。 50. ucfirst: 将字符串第一个字符改大写 ucfirst 函数将字符串第...

    Oracle通过正则表达式分割字符串 REGEXP_SUBSTR的代码详解

    string :需要进行正则处理的字符串 pattern :进行匹配的正则表达式 position :起始位置,从第几个字符开始正则表达式匹配(默认为1) occurrence :标识第几个匹配组,默认为1 modifier :模式(‘i’不区分大...

    字符串按照指定的字节数来截取

    字符串是由字符组成的序列,而“字符串按照指定的字节数来截取”这个话题,就是指如何在字符串中提取固定字节数的部分。在不同的编程语言中,都有相应的函数或方法来实现这一功能。 在Python中,可以使用内置的`...

    PHP中如何截取中文字符串

    除非你知道字符串是单字节编码(如ASCII),否则应避免直接使用`substr()`处理中文字符串。 在实际开发中,考虑到性能和兼容性,推荐使用`mb_substr()`函数来处理中文字符串的截取。同时,为了确保代码的健壮性,...

    php截断字符串优化函数 php截断字符串优化函数

    3. **使用`mb_substr()`处理多字节字符:**当处理包含多字节字符(如UTF-8编码的中文字符)的字符串时,`substr()`可能无法正确处理。这时,可以使用`mb_substr()`函数,它能够识别多字节字符并正确截取。例如: ``...

    一个php截取指定字符串之间的字符串的类

    字符串处理是PHP中的核心功能之一,PHP提供了丰富的内置函数来处理字符串,如`substr()`、`strstr()`、`strpos()`等。然而,在某些复杂场景下,这些基础函数可能无法满足需求,例如需要截取两个标记之间的内容,或者...

    php通用截取字符串.zip

    类似于 `substr()`,`mb_strimwidth()` 在多字节字符集下工作,但还可以根据指定的宽度和终止字符串来截取并修剪字符串。 在实际应用中,我们可能还需要考虑字符串的编码、字符集以及截取规则(如是否包含结束标记...

    PHP 计算字符串长度

    在PHP编程语言中,计算字符串长度是一个常见的任务,特别是在处理用户输入、文本...结合其他字符串函数,我们可以完成各种字符串操作和验证。对于`str.php`文件,可以期望找到与这些知识点相关的代码示例或实用工具。

    字符串的操作, 字符串的合并 截取

    本资料主要聚焦于字符串的合并与截取,这些都是字符串基本操作的核心部分。 首先,我们要理解在C++中如何表示字符串。C++标准库提供了`std::string`类来处理字符串,这是一个非常方便的工具,它提供了丰富的成员...

    PHP字符串处理讲述了很多关于字符串的常用用法

    ### PHP字符串处理详解 #### 一、引言 在PHP编程中,字符串处理是一项非常重要的技能。无论是构建网页内容、处理用户输入还是与其他系统交互,掌握...希望本文能帮助读者更好地理解和应用这些强大的字符串处理技术。

    php字符串函数分类

    字符串查找是处理字符串时非常重要的操作之一。 ##### `strpos` **功能描述:** 查找字符串首次出现的位置。 **示例代码:** ```php $row = ['housetitle' =&gt; '100%淿源']; if (strpos($row['housetitle'], '100%...

    php截取字符串

    最后,提供的压缩包文件"CString.php"可能包含了作者自定义的字符串操作类或函数,可以下载并学习,以便更好地理解PHP中字符串操作的实现方式和扩展可能性。通过学习和研究这些自定义工具,你可以加深对PHP字符串...

    php的字符串类.zip

    为了方便开发者高效地操作字符串,PHP提供了一个内置的字符串类,这个类包含了许多实用的方法,能够帮助我们进行各种字符串操作。在这个"php的字符串类.zip"压缩包中,我们可以找到一个自定义的字符串类,它可能包含...

    JS——字符串

    - 字符串可以使用单引号或双引号创建,两者效果相同。 3. **字符串属性** - `length`:返回字符串的长度,例如`str.length`。 4. **字符串操作** - 连接:`+`运算符可以连接两个字符串。 - 拼接:`str.concat...

    oracle中操作字符串

    ### Oracle中操作字符串 在Oracle数据库中,对字符串进行处理是一项常见的需求,特别是在处理带有特定分隔符(如逗号`,`、冒号`:`等)的字符串时。本文将详细介绍如何利用Oracle内置函数来实现从含有逗号和冒号的...

    javascript字符串操作

    本文将详细介绍JavaScript中的字符串操作方法,帮助开发者更好地理解和运用这些功能。 #### 基础概念与创建方式 1. **创建字符串**: - 使用单引号(`'`)或双引号(`"`)来创建一个字符串,例如:`var str = "Hello,...

    PHP 获取字符串中的字符

    本篇文章将深入探讨如何在PHP中获取字符串中的特定字符,这是一项基础但至关重要的技能,对于处理用户输入、数据处理和文本操作至关重要。 首先,我们需要了解字符串的基本概念。在PHP中,字符串是由一个或多个字符...

    关于java按字节截取带有汉字的字符串的解法

    在Java编程语言中,处理带有汉字的字符串时,由于汉字占据多个字节,按照字节进行截取可能会导致汉字被不完整地分割,从而产生乱码。为了解决这个问题,我们需要理解Unicode编码以及如何在Java中正确处理多字节字符...

Global site tag (gtag.js) - Google Analytics