A small comparison of the performance of PHP functions

  • 2020-03-31 21:09:09
  • OfStack

That is, the original array of Numbers are "split" into "single" bits.
Here is a function written by myself:
 
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 can be executed as follows:
 
//The test array
$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" 
} 

Well done, but you'll be surprised if you look at the standard answer, which is a one-sentence function:
 
//Standard functions
function splitStrToArray($array) 
{ 
return str_split(implode("", $array)); 
} 

So I wrote a script to test the efficiency gap between my own and standard functions, with a microtime_float() function to provide accurate time support:
 
//It's a function of time
function microtime_float() 
{ 
list($usec, $sec) = explode(" ", microtime()); 
return ((float)$usec + (float)$sec); 
} 
//Custom function
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; 
} 
//Standard functions
function splitStrToArray($array) 
{ 
return str_split(implode("", $array)); 
} 
//The test array
$data = array(12, 43, 87, 45, 98, 74, 83, 67, 12); 
//To begin testing
$mine_start = microtime_float(); 
splitStrToArray_mine($data); 
$mine_end = microtime_float(); 
//Standard function call
$sta_start = microtime_float(); 
splitStrToArray($data); 
$sta_end = microtime_float(); 
echo " The running time of its own function call is: " . (float)($mine_end - $mine_start) . " S <br />"; 
echo " The running time of the standard function call is: " . (float)($sta_end - $sta_start) . " S <br />"; 
$multiple = (int)((float)($mine_end - $mine_start) / (float)($sta_end - $sta_start)); 
echo " The former is the latter: " . $multiple . "  Times! "; 

Take a look at the output:
The running time of my function call is 9.3936920166e-005s
The standard function call runtime is 2.69412994385e-005s
The former is more than the latter: three times!
Refresh the page several times, you can find that the standard function is basically 3 times as efficient as its own function! Of course, the standard function USES PHP's built-in functions: str_split(), implode(), so it's a lot faster than writing your own function, not impressed by str_split()? Take a look at the manual:
Str_split -- Convert a string to 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 USES of str_split()
 
<?php 
$str = "Hello Friend"; 
$arr1 = str_split($str); 
$arr2 = str_split($str, 3); 
print_r($arr1); 
print_r($arr2); 
?> 

The 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 
) 

Related articles: