2017-04-08 137 views
0

我们可以使用位运算符“|”在PHP中strpos? 我需要检查在给定的$ status变量中是否存在字符串a0,a1,a2,a5。 我的代码给出bellow.My代码将返回值(位置)只有当状态变量有值= a0或a1或a2或a5。它将返回false时,状态='a1测试字符串。我们可以使用位运算符“|”在PHP中strpos?

$status='a1 test string'; 
echo strpos("|a0|a1|a2|a5|", $status); 
+0

问题是:如何定义什么_part_你真的想搜索该状态字符串的? – arkascha

+0

我需要搜索字符串($状态)是否包含a1或a2或a0或a5 – user1752065

+0

而且如果状态字符串是类似“a2不同于a5或a3!”? – arkascha

回答

1

你可以这样使用它。这里|意味着or

<?php 
$status='a1 test string'; 

if(preg_match("/\b(a0|a1|a2|a5)\b/", $status)) 
{ 
    echo "Matched"; 
} 
+0

我在一个开源项目(Open EMR)中找到了这段代码。这段代码是正确的吗? $ status ='a1 test string'; echo strpos(“| a0 | a1 | a2 | a5 |”,$ status); – user1752065

+0

@ user1752065让我们检查其他选项 –

1

我们可以使用位运算符 “|”在PHP中strpos?

为位运算符| - 没有

为一个文字符号| -

+0

所以这'(strpos(“| a0 | a1 | a2 | a5 |”,$ status))'会考虑“| a0 | a1 | a2 | a5 |”作为单个字符串r8? – user1752065

+1

我不知道你的情况下是什么'r8',但是,是的,'strpos'认为'“| a0 | a1 | a2 | a5 |”'作为单个字符串 – RomanPerekhrest

1

不,你不能。 Documentation没有提到任何远程类似:

strpos - 查找 字符串

一个字符串的第一个出现的位置找到needlehaystack字符串中第一次出现的数字位置。

参数

haystack的字符串中搜索。

needle如果针不是字符串,它被转换为一个整数,并施加作为字符的顺序值 。

offset如果指定,则搜索将开始从字符串的开头开始计算的这个数字字符 。如果偏移量为负数,则 搜索将开始从字符串的末尾 开始计算的这个字符数。

事实上,它不会使实现这种功能太大的意义,因为你已经有了一个全面的regular expression引擎:

$has_substrings = (bool)preg_match('/a0|a1|a2|a5/u', $status); 
+0

我发现上面的代码在开源项目。所以这会考虑“| a0 | a1 | a2 | a5 |”作为单个字符串r8? – user1752065

+0

@ user1752065 r8?我不知道你在说什么 - 记住我们无法读懂你的想法;-)如果你对某些软件有疑问,你应该明确地询问它们(当然还要提供一些上下文)。 –

0

你不能做到这一点与一个字符串搜索。您需要使用可以一次测试多个选项的正则表达式,或者需要遍历搜索条件。

Sahil Gulati给出了一个基于正则表达式的方法的简单例子。

下面是一个简单的迭代为基础的方法:

<?php 
$status = 'a1 test string'; 
$search = explode('|', substr("|a0|a1|a2|a5|", 1, -1)); 
// would be much easier to start with an array of search tokens right away: 
// $search = ['a0', 'a1', 'a2', 'a5']; 

$result = false; 
array_walk($search, function($token) use ($status, &$result) { 
    $result = (FALSE!==strpos($status, $token)) ? true : $result; 
}); 
var_dump($result); 
相关问题