仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1462|回复: 19
打印 上一主题 下一主题

[学习教程] PHP网站制作之PHP 函数履行效力的小对照

[复制链接]
跳转到指定楼层
楼主
发表于 2015-2-3 23:41:29 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
另外要叮嘱各位的是,抵御诱惑,ASP/PHP/JSP/.NET的对比也许会让你无所适从,你也许学了一半PHP,又开始打C#的主意,或者有人说JAVA很强,这个时候的你绝对不能动摇,哪怕你真想学。   就是把本来的数组中的数都“拆”成“单”位的。
上面是本人写的一个函数:
复制代码 代码以下:
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
)
我的这套线路可能跟许多学习PHP的爱好者不谋而合,这也算是一个循序渐进的学习过程,不过新手不要看到上面的概括就以为学习蛮简单的,默默在此不得不对您稍微泼一下冷水,任何东西其实都不简单。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-5-17 18:30

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表