在数组种查找字符串的传统方法是遍厉数组,逐个比较。有没有更好的方法呢?
笔者尝试写了以下函数:
/***********************************************************************
函数名: is_string_in_array
参数类型: string,array,char
参数说明: 要查找的字符串,查找的字符串的数组,填充字符串的字符(把数组转为字符串时使用)_缺省为“,"
返回类型: BOOL
返回值: 查到:TRUE; 没查到:FALSE
说明: 判断一个数组中有没有给定的字符串
************************************************************************/
function is_string_in_array($t_string,$t_array,$fill_char=',')
{
$array_string=implode($t_array,$fill_char);
$array_string=$fill_char.$array_string;
$array_string.=$fill_char;
if(ereg($fill_char.$t_string.$fill_char,$array_string))
return TRUE;
else
return FALSE;
}
基本思路是把数组合并为字符串,然后用正则表达式匹配。经过测试效率要高于
传统的方法。不足之处,请各位指正。测试程序附下:
<?php
function is_string_in_array($t_string,$t_array,$fill_char=',')
{
$array_string=implode($t_array,$fill_char);
$array_string=$fill_char.$array_string;
$array_string.=$fill_char;
if(ereg($fill_char.$t_string.$fill_char,$array_string))
return TRUE;
else
return FALSE;
}
function is_string_in_array_old($t_string,$t_array)
{
foreach ($t_array as $value)
{
if($t_string==$value)
return TRUE;
}
return FALSE;
}
$test_array=array("安徽","北京","福建","甘肃","广东","广西","贵州","海南","河北",
"河南","黑龙江","湖北","湖南","吉林","江苏","江西","辽宁",
"内蒙古","宁夏","青海","山东","山西", "陕西","上海","四川",
"天津","新疆","西藏","云南","浙江","重庆","香港","澳门","台湾");
echo date("s秒n");
for($i=0;$i<10000;$i++)
echo is_string_in_array_old('台湾',$test_array);
echo date("s秒n");
for($i=0;$i<10000;$i++)
echo is_string_in_array('台湾',$test_array);
echo date("s秒n");
?>
|