• 函数执行效率的小比较PHP 函数学习


    如题:要求写一个自定义函数,使 $data = array(12, 43, 87, 45) => $data = array(1, 2, 4, 3, 8, 7, 4, 5);

    就是把原来的数组中的数都“拆”成“单”位的。

    下面是自己写的一个函数:

    function splitStrToArray_mine($array)
    {
    	$new_array = array();
    	foreach($array as $value)
    	{
    		$value = (string)$value;
    		$len = strlen($value);
    		for($i = 0; $i < $len; $i ++){
    			array_push($new_array, $value{$i});
    		}
    	}
    	return $new_array;
    }

    测试了一下,还是可以执行的,如下调用:

    //测试数组
    $data = array(12, 43, 87, 45, 98, 74, 83, 67, 12);
    var_dump(splitStrToArray_mine($data));

    输出结果为:

    array(18) {
      [0]=>
      string(1) "1"
      [1]=>
      string(1) "2"
      [2]=>
      string(1) "4"
      [3]=>
      string(1) "3"
      [4]=>
      string(1) "8"
      [5]=>
      string(1) "7"
      [6]=>
      string(1) "4"
      [7]=>
      string(1) "5"
      [8]=>
      string(1) "9"
      [9]=>
      string(1) "8"
      [10]=>
      string(1) "7"
      [11]=>
      string(1) "4"
      [12]=>
      string(1) "8"
      [13]=>
      string(1) "3"
      [14]=>
      string(1) "6"
      [15]=>
      string(1) "7"
      [16]=>
      string(1) "1"
      [17]=>
      string(1) "2"
    }

    虽然执行的不错,但是看看标准答案就会让你大吃一惊的,函数中就一句话,如下:

    //标准函数
    function splitStrToArray($array)
    {
    	return str_split(implode("", $array));
    }

    于是写了脚本来测试自己的和标准的函数的运行效率差距,里面有一个 microtime_float() 函数用来提供精确时间的支持:

    //测量时间的函数
    function microtime_float()
    {
    	list($usec, $sec) = explode(" ", microtime());
    	return ((float)$usec + (float)$sec);
    }
    //自定义函数
    function splitStrToArray_mine($array)
    {
    	$new_array = array();
    	foreach($array as $value)
    	{
    		$value = (string)$value;
    		$len   = strlen($value);
    		for($i = 0; $i < $len; $i ++){
    			array_push($new_array, $value{$i});
    		}
    	}
    	return $new_array;
    }
    //标准函数
    function splitStrToArray($array)
    {
    	return str_split(implode("", $array));
    }
    //测试数组
    $data = array(12, 43, 87, 45, 98, 74, 83, 67, 12);
    //开始测试
    $mine_start = microtime_float();
    splitStrToArray_mine($data);
    $mine_end   = microtime_float();
    //标准函数调用
    $sta_start = microtime_float();
    splitStrToArray($data);
    $sta_end   = microtime_float();
    
    echo "自己的函数调用运行时间为:" . (float)($mine_end - $mine_start) . " S <br />";
    echo "标准的函数调用运行时间为:" . (float)($sta_end - $sta_start) . " S <br />";
    $multiple = (int)((float)($mine_end - $mine_start) / (float)($sta_end - $sta_start));
    echo "前者是后者的:" . $multiple . " 倍!";

    来看看输出结果:

    自己的函数调用运行时间为:9.3936920166E-005 S 
    标准的函数调用运行时间为:2.69412994385E-005 S 
    前者是后者的:3 倍! 

    多次刷新页面的话,可以发现标准函数的执行效率基本上是自己的函数的 3 倍!当然,标准的函数中使用了 PHP 的内置函数: str_split(),implode(),所以要比自己写函数快得多,对 str_split() 函数没有印象?来看看手册解释:

     str_split --  Convert a string to an array(将一个字符串转换成数组)

    函数描述:

    array str_split ( string string [, int split_length] )

    Converts a string to an array. If the optional split_length parameter is specified, the returned array will be broken down into chunks with each being split_length in length, otherwise each chunk will be one character in length. 
    
    FALSE is returned if split_length is less than 1. If the split_length length exceeds the length of string, the entire string is returned as the first (and only) array element. 

    例 1. Example uses of str_split()

    <?php
    
    $str = "Hello Friend";
    
    $arr1 = str_split($str);
    $arr2 = str_split($str, 3);
    
    print_r($arr1);
    print_r($arr2);
    
    ?> 

    Output may look like:

    Array
    (
        [0] => H
        [1] => e
        [2] => l
        [3] => l
        [4] => o
        [5] =>
        [6] => F
        [7] => r
        [8] => i
        [9] => e
        [10] => n
        [11] => d
    )
    
    Array
    (
        [0] => Hel
        [1] => lo 
        [2] => Fri
        [3] => end
    )
  • 相关阅读:
    Dynamics 365 CRM large instance copy
    Dynamics CRM Plug-in
    Dynamics CRM Publisher
    Dynamics 365 CRM Free up storage 清理Dynamics 365 CRM的空间
    账户和联系人 Accounts and Contacts 译
    Dynamics CRM Instances
    Dynamics CRM Solution
    微软Azure通知中心 (Azure Notification Hubs)
    CLR(Common Language Runtime) 公共语言运行库
    构建Apache Web服务器
  • 原文地址:https://www.cnblogs.com/catprayer/p/1853060.html
Copyright © 2020-2023  润新知