就是把原来的数组中的数都“拆”成“单”位的。
下面是自己写的一个函数:
<BR>function splitStrToArray_mine($array) <BR>{ <BR>$new_array = array(); <BR>foreach($array as $value) <BR>{ <BR>$value = (string)$value; <BR>$len = strlen($value); <BR>for($i = 0; $i < $len; $i ++){ <BR>array_push($new_array, $value{$i}); <BR>} <BR>} <BR>return $new_array; <BR>} <BR>
测试了一下,还是可以执行的,如下调用:
<BR>//测试数组 <BR>$data = array(12, 43, 87, 45, 98, 74, 83, 67, 12); <BR>var_dump(splitStrToArray_mine($data)); <BR>
输出结果为:
<BR>array(18) { <BR>[0]=> <BR>string(1) "1" <BR>[1]=> <BR>string(1) "2" <BR>[2]=> <BR>string(1) "4" <BR>[3]=> <BR>string(1) "3" <BR>[4]=> <BR>string(1) "8" <BR>[5]=> <BR>string(1) "7" <BR>[6]=> <BR>string(1) "4" <BR>[7]=> <BR>string(1) "5" <BR>[8]=> <BR>string(1) "9" <BR>[9]=> <BR>string(1) "8" <BR>[10]=> <BR>string(1) "7" <BR>[11]=> <BR>string(1) "4" <BR>[12]=> <BR>string(1) "8" <BR>[13]=> <BR>string(1) "3" <BR>[14]=> <BR>string(1) "6" <BR>[15]=> <BR>string(1) "7" <BR>[16]=> <BR>string(1) "1" <BR>[17]=> <BR>string(1) "2" <BR>} <BR>
虽然执行的不错,但是看看标准答案就会让你大吃一惊的,函数中就一句话,如下:
<BR>//标准函数 <BR>function splitStrToArray($array) <BR>{ <BR>return str_split(implode("", $array)); <BR>} <BR>
于是写了脚本来测试自己的和标准的函数的运行效率差距,里面有一个 microtime_float() 函数用来提供精确时间的支持:
<BR><p style="color:transparent">。本文来源gao!%daima.com搞$代*!码网1</p><cite>搞代gaodaima码</cite>//测量时间的函数 <BR>function microtime_float() <BR>{ <BR>list($usec, $sec) = explode(" ", microtime()); <BR>return ((float)$usec + (float)$sec); <BR>} <BR>//自定义函数 <BR>function splitStrToArray_mine($array) <BR>{ <BR>$new_array = array(); <BR>foreach($array as $value) <BR>{ <BR>$value = (string)$value; <BR>$len = strlen($value); <BR>for($i = 0; $i < $len; $i ++){ <BR>array_push($new_array, $value{$i}); <BR>} <BR>} <BR>return $new_array; <BR>} <BR>//标准函数 <BR>function splitStrToArray($array) <BR>{ <BR>return str_split(implode("", $array)); <BR>} <BR>//测试数组 <BR>$data = array(12, 43, 87, 45, 98, 74, 83, 67, 12); <BR>//开始测试 <BR>$mine_start = microtime_float(); <BR>splitStrToArray_mine($data); <BR>$mine_end = microtime_float(); <BR>//标准函数调用 <BR>$sta_start = microtime_float(); <BR>splitStrToArray($data); <BR>$sta_end = microtime_float(); <BR>echo "自己的函数调用运行时间为:" . (float)($mine_end - $mine_start) . " S <br />"; <BR>echo "标准的函数调用运行时间为:" . (float)($sta_end - $sta_start) . " S <br />"; <BR>$multiple = (int)((float)($mine_end - $mine_start) / (float)($sta_end - $sta_start)); <BR>echo "前者是后者的:" . $multiple . " 倍!"; <BR>
来看看输出结果:
自己的函数调用运行时间为: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] )
<BR>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. <BR>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. <BR>
例 1. Example uses of str_split()
<BR><?php <BR>$str = "Hello Friend"; <BR>$arr1 = str_split($str); <BR>$arr2 = str_split($str, 3); <BR>print_r($arr1); <BR>print_r($arr2); <BR>?> <BR>
Output may look like:
<BR>Array <BR>( <BR>[0] => H <BR>[1] => e <BR>[2] => l <BR>[3] => l <BR>[4] => o <BR>[5] => <BR>[6] => F <BR>[7] => r <BR>[8] => i <BR>[9] => e <BR>[10] => n <BR>[11] => d <BR>) <BR>Array <BR>( <BR>[0] => Hel <BR>[1] => lo <BR>[2] => Fri <BR>[3] => end <BR>) <BR>