首頁 php教程 php手册 分拆数组元素的函数效率比较与分析

分拆数组元素的函数效率比较与分析

Jun 13, 2016 am 09:38 AM
函數效率

有这么一个需求,一个数组$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 
"; echo "标准的函数调用运行时间为:" . (float)($sta_end - $sta_start) . " S
"; $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
)
登入後複製
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)