程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> 分拆數組元素的函數效率比較與分析

分拆數組元素的函數效率比較與分析

編輯:關於PHP編程

有這麼一個需求,一個數組$data = array(12, 43, 87, 45),要求寫一個自定義函數,將其數組元素的數字單個拆開,最後形成的數組如下:$data = array(1, 2, 4, 3, 8, 7, 4, 5)。就是把原來的數組中的數都“拆”成“單”位的。

下面是自己寫的一個函數:

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);
?> 

程序運行結果:

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
)

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved