strpos在搜索字符串时如何使用针数组?例如:
$find_letters = array('a', 'c', 'd');
$string = 'abcdefg';
if(strpos($string, $find_letters) !== false)
{
echo 'All the letters are found in the string!';
}
Run Code Online (Sandbox Code Playgroud)
因为在使用它时,它不起作用,如果有这样的东西会很好
我注意到很多开发人员正在使用strstr和strpos来检查子字符串是否存在.他们中的一个是首选,为什么?
如何更改strpos以使其不区分大小写.原因是如果product->name是MadBike并且搜索词是自行车它不会回应我的链接.我主要担心的是代码的速度.
<?php
$xml = simplexml_load_file('test.xml');
$searchterm = "bike";
foreach ($xml->product as $product) {
if (strpos($product->name, $searchterm) !== false ) {
echo $product->link;
} }
?>
Run Code Online (Sandbox Code Playgroud) 我有一个数组,在那个数组中我有一个看起来像show_me_160这样的数组键,这个数组键可能会改变一点,所以有时候页面可能会加载而数组键也许show_me_120,我想现在可以只是字符串匹配数组键直到最后一次,_以便我可以检查最后一个下划线后的值是多少?
我正在尝试查看文件是否包含发送到页面的字符串.我不确定这段代码有什么问题:
?php
$valid = FALSE;
$id = $_GET['id'];
$file = './uuids.txt';
$handle = fopen($file, "r");
if ($handle) {
// Read file line-by-line
while (($buffer = fgets($handle)) !== false) {
if (strpos($buffer, $id) === false)
$valid = TRUE;
}
}
fclose($handle);
if($valid) {
do stufff
}
Run Code Online (Sandbox Code Playgroud) 为什么这个独立代码不起作用:
$link = 'https://google.com';
$unacceptables = array('https:','.doc','.pdf', '.jpg', '.jpeg', '.gif', '.bmp', '.png');
foreach ($unacceptables as $unacceptable) {
if (strpos($link, $unacceptable) === true) {
echo 'Unacceptable Found<br />';
} else {
echo 'Acceptable!<br />';
}
}
Run Code Online (Sandbox Code Playgroud)
即使https包含在$link变量中,每次打印都是可接受的.
我正在寻找像strpos()这样的函数,它有两个显着的区别:
当然,它必须是一种有效的解决方案,而不仅仅是每根针的循环.我搜索了这个论坛,并且有类似的问题,例如:
但是我们正在寻找它们.我使用strpos只是为了更好地说明我的问题,可能有一些完全不同的东西必须用于此目的.
我知道Zend_Search_Lucene,我感兴趣的是它是否可以用来实现这个以及如何(只是一般的想法)?
非常感谢您的帮助和时间!
if(strpos("http://www.example.com","http://www.")==0){ // do work}
Run Code Online (Sandbox Code Playgroud)
我希望这能解决它的真实性.但是当我这样做时会发生什么
if(strpos("abcdefghijklmnop","http://www.")==0){// do work}
Run Code Online (Sandbox Code Playgroud)
这也传递了PHP 5,因为我可以解决strpos返回false,转换为0.
这是正确的思考/行为吗?如果是这样,那么测试子字符串的解决方法是在另一个字符串的开头?
$filename = 'my_upgrade(1).zip';
$match = 'my_upgrade';
if(!strpos($filename, $match))
{
die();
}
else
{
//proceed
}
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,当文件名不包含文本字符串"my_upgrade"时,我正试图从脚本中消失.但是,在给出的示例中,它不应该死,因为" my_upgrade(1).zip "包含字符串" my_upgrade ".
我错过了什么?
我曾批评一个答案,暗示preg_match了===,为了避免类型不匹配查找字符串偏移时.
不过,后来对答案的作者已经发现,preg_match实际上是显著快于多字节操作mb_strpos.Normal strpos比两个函数都快,但当然不能处理多字节字符串.
据我了解,mb_strpos需要做更多的东西比strpos.然而,如果正则表达式可以做到这一点几乎一样快的strpos,它是什么,mb_strpos这是否需要这么多的时间?
我怀疑这是一个优化错误.例如,PHP扩展可能比其原生函数慢吗?
mb_strpos($str, "??", 0 ,"GBK"): 15.988190889 (89%)
preg_match("/??/", $str): 1.022506952 (6%)
strpos($str, "dh"): 0.934401989 (5%)
Run Code Online (Sandbox Code Playgroud)
功能运行10 次6次.绝对时间(s)计算函数的10 6次运行的时间总和,而不是一次的平均值.
测试字符串是$str = "??dhgd????";.该测试可以在这里看到(向下滚动跳过测试类).
注意:根据评论员之一(和常识),preg_match比较时也不使用多字节,受到同样的错误风险strpos.