有这么一个需求,一个数组$data = array(12, 43, 87, 45),要求写一个自定义函数,将其数组元素的数字单个拆开,最后形成的数组如下:$data = array(1, 2, 4, 3, 8, 7, 4, 5)。就是把原来的数组中的数都“拆”成“单”位的。
下面是自己写的一个函数:
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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 ;
}
|
로그인 후 복사
测试了一下,还是可以执行的,如下调用:
1 2 3 | $data = array (12, 43, 87, 45, 98, 74, 83, 67, 12);
var_dump(splitStrToArray_mine( $data ));
|
로그인 후 복사
输出结果为:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | 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"
}
|
로그인 후 복사
虽然执行的不错,但是看看标准答案就会让你大吃一惊的,函数中就一句话,如下:
1 2 3 4 5 | function splitStrToArray( $array )
{
return str_split (implode( "" , $array ));
}
|
로그인 후 복사
于是写了脚本来测试自己的和标准的函数的运行效率差距,里面有一个 microtime_float() 函数用来提供精确时间的支持:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | 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 . " 倍!" ;
|
로그인 후 복사
来看看输出结果:
1 2 3 | 自己的函数调用运行时间为: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()
1 2 3 4 5 6 7 | <?php
$str = "Hello Friend" ;
$arr1 = str_split ( $str );
$arr2 = str_split ( $str , 3);
print_r( $arr1 );
print_r( $arr2 );
?>
|
로그인 후 복사
程序运行结果:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | 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
)
|
로그인 후 복사
http://www.bkjia.com/PHPjc/752468.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/752468.htmlTechArticle有这么一个需求,一个数组$data = array(12, 43, 87, 45),要求写一个自定义函数,将其数组元素的数字单个拆开,最后形成的数组如下:$data =...