Home > Article > Backend Development > Comparison and analysis of function efficiency of splitting array elements_PHP tutorial
There is such a requirement. An array $data = array(12, 43, 87, 45) requires writing a custom function to separate the numbers of the array elements individually. The final array is as follows: $data = array(1, 2, 4, 3, 8, 7, 4, 5). It means to "split" all the numbers in the original array into "single" digits.
The following is a function I wrote:
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; }
After testing it, it can still be executed. Call as follows:
//测试数组 $data = array(12, 43, 87, 45, 98, 74, 83, 67, 12); var_dump(splitStrToArray_mine($data));
The output result is:
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" }
Although the execution is good, you will be surprised if you look at the standard answer. There is only one sentence in the function, as follows:
//标准函数 function splitStrToArray($array) { return str_split(implode("", $array)); }
So I wrote a script to test the operating efficiency gap between my own and standard functions. There is a microtime_float() function in it to provide precise time support:
//测量时间的函数 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
"; echo "标准的函数调用运行时间为:" . (float)($sta_end - $sta_start) . " S
"; $multiple = (int)((float)($mine_end - $mine_start) / (float)($sta_end - $sta_start)); echo "前者是后者的:" . $multiple . " 倍!";
Let’s take a look at the output:
自己的函数调用运行时间为:9.3936920166E-005 S 标准的函数调用运行时间为:2.69412994385E-005 S 前者是后者的:3 倍!
If you refresh the page multiple times, you can find that the execution efficiency of the standard function is basically 3 times that of your own function! Of course, the standard functions use PHP's built-in functions: str_split(), implode(), so it is much faster than writing the function yourself. Have no impression of the str_split() function? Let’s take a look at the manual explanation:
str_split -- Convert a string to an array (convert a string into an array)
Function description:
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.
Example 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); ?>
Program execution result:
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 )