在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