in_array:
in_array() 函数在数组中搜索给定的值,在第三个参数中拥有true or false,.默认为FALSE,可以设置检查类型是否相同。
时间:2925.6ms
array_search:
array_search() 函数与 in_array() 一样,在数组中查找一个键值。如果找到了该值,匹配元素的键名会被返回。如果没找到,则返回 false。同样可以设置第3参数
时间:2817.9ms
Isset:
isset函数是检测变量是否设置。
格式:bool isset ( mixed var [, mixed var [, ...]] )
返回值:
若变量不存在则返回 FALSE
若变量存在且其值为NULL,也返回 FALSE
若变量存在且值不为NULL,则返回 TURE
同时检查多个变量时,每个单项都符合上一条要求时才返回 TRUE,否则结果为 FALSE
如果已经使用 unset() 释放了一个变量之后,它将不再是 isset()。若使用 isset() 测试一个被设置成 NULL 的变量,将返回 FALSE。同时要注意的是一个 NULL 字节("")并不等同于 PHP 的 NULL 常数。
警告: isset() 只能用于变量,因为传递任何其它参数都将造成解析错误。若想检测常量是否已设置,可使用 defined() 函数。
时间:48.8ms
array_key_exists:
array_key_exists() 在给定的 key 存在于数组中时返回 TRUE。key 可以是任何能作为数组索引的值。array_key_exists() 也可用于对象。
时间:2699.2
测试代码:
<?php
$runtime= new runtime;
$runtime->start();
$a = 'k';
$b = array('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z');
//$b_change=array_flip($b);
/*for ($i=0; $i < 100000; $i++) {
// in_array($a, $b);
//var_dump (in_array($a, $b));
}*/
for ($i=0; $i < 100000; $i++) {
//array_search($a, $b);
var_dump(array_search($a, $b));
}
/*for ($i=0; $i < 100000; $i++) {
//array_key_exists($a, $b_change);
var_dump(array_key_exists($a, $b_change));
}
*/
/*for ($i=0; $i < 100000; $i++) {
//isset($a, $b_change);
//var_dump(isset($a, $b_change));
}*/
$runtime->stop();
echo "页面执行时间: ".$runtime->spent()." 毫秒";
class runtime
{
var $StartTime = 0;
var $StopTime = 0;
function get_microtime()
{
list($usec, $sec) = explode(' ', microtime());
return ((float)$usec + (float)$sec);
}
function start()
{
$this->StartTime = $this->get_microtime();
}
function stop()
{
$this->StopTime = $this->get_microtime();
}
function spent()
{
return round(($this->StopTime - $this->StartTime) * 1000, 1);
}
}
?>
结果分析:
在php中,有这样一些函数,它们在使用上是标准的函数用法,但底层实现却和真正函数调用完全不同,这些函数不属于前文提到的三种function中的任何一类,其实质是一条单独的opcode,这里估且叫做伪函数或者指令函数。
如上所说,伪函数使用起来和标准的函数并无二致,看起来具有相同的特征。但是他们最终执行的时候是被zend反映成了一条对应的指令(opcode)来调用,因此其实现更接近于if、for、算术运算等操作。
php中的伪函数
isset
empty
unset
eval
通过上面的介绍可以看出,伪函数由于被直接翻译成指令来执行,和普通函数相比少了一次函数调用所带来的开销,因此性能会更好一些。
In_array array_search array_key_exists
其中array_key_exists比另外两者的速度快很多,因为KEY是进行HASH组织的,查询很快。
而VALUE是由KEY组织存放,本身没有索引,每次查找都是遍历。