在php中查找子字符串的最有效方法
在招聘过程技能测试中,我被问到了以下问题: 假设一个大的随机字符串,例如:在php中查找子字符串的最有效方法,php,Php,在招聘过程技能测试中,我被问到了以下问题: 假设一个大的随机字符串,例如: $x=str_shuffle(str_repeat(内爆(“”,range('a','z')),1000000)) 找到子字符串最有效的方法是什么 我想知道答案只是为了了解它 事先谢谢 您可以这样做: <?php $mystring = 'abc'; $findme = 'a'; $pos = strpos($mystring, $findme); // Note our use of ===. Simpl
$x=str_shuffle(str_repeat(内爆(“”,range('a','z')),1000000))代码>
找到子字符串最有效的方法是什么
我想知道答案只是为了了解它
事先谢谢 您可以这样做:
<?php
$mystring = 'abc';
$findme = 'a';
$pos = strpos($mystring, $findme);
// Note our use of ===. Simply == would not work as expected
// because the position of 'a' was the 0th (first) character.
if ($pos === false) {
echo "The string '$findme' was not found in the string '$mystring'";
} else {
echo "The string '$findme' was found in the string '$mystring'";
echo " and exists at position $pos";
}
您有以下选项:
strpos()
,preg_match()
用于正则表达式匹配,而stripos()
用于不区分大小写的搜索
正则表达式匹配总是比普通字符串搜索慢。但这里是一个比较,考虑到PHP的普通安装中区分大小写或不区分大小写的字符串:
该数据是从1k
字符串中的10000
搜索中获得的
谢谢你的回答。我知道这是一种选择,但我也想知道其他用户的意见,只是想知道这是否是最有效的方式我不喜欢那些面试问题,我首先想到的是“在快速硬件上投入一些钱,然后用它来完成”。这些问题,如果你一定要问的话,应该用“讨论解决问题的一些方法及其后果”来表达。“子字符串”是指一次几个?到底什么是高效?(快速实现、健壮、可维护、可并行化……)以及更多的开放性问题,使这一点变得更有意义……这个问题太模糊了。我完全同意@VolkerK。从未指定子字符串是什么(1个字符,多个字符)。这个问题看起来像是对“隐藏的”真实问题的拙劣尝试——这个问题被称为。该链接还包括解释。除非对问题有实质性的解释,否则最快的方法就是strpos
,因为你真的不能做任何其他事情。谢谢大家的评论。我同意你的看法,这个问题太模糊了。我的回答是,在php中查找子字符串最有效的方法是使用strop
,但我想确定这一点。“在php中查找子字符串”-哦,在php中,那么实现Boyer-Moore算法的[当然是并行]版本的C扩展是不可能的?该死,我觉得答案太明显了;-)当然,这个问题可以讨论;这本身不是一个愚蠢的问题,远远不是。我的问题是,我经常看到这样的面试问题在没有背景的情况下胡乱提出。“借口”通常是“我们不在乎确切的答案;我们想看看申请人如何解决问题”;但是如果没有好的证据我就不相信了。。。
php5-cgi strpos() 27.7 ms
mod_php5 strpos() 30.6 ms
mod_php5 + ZP strpos() 37.2 ms
php5-cgi stripos() 163.6 ms
mod_php5 stripos() 172.8 ms
mod_php5 + ZP stripos() 177.3 ms
php5-cgi preg_match() 72.2 ms